C语言基础算法

//
//  main.c
//  选择排序
//
//  Created by king on 15/10/20.
//  Copyright © 2015年 king. All rights reserved.
//

#include <stdio.h>

int main(int argc, const char * argv[]) {
    // 定义数组
    int array[5] = {23, 56, 36, 89, 50};

    // 计算数组长度
    int length = sizeof(array) / sizeof(array[0]);

    // 遍历数组(无序)
    for (int i = 0; i < length; i++) {
        printf("array[%d] = %d\n", i, array[i]);
    }

    printf("----------------------\n");

    // length - 1  防止越界 ,因为最后一个不需要在比较了
    for (int i = 0; i < length - 1; i ++) {

        for (int j = i + 1;  j < length; j++) {

            if (array[i] > array[j]) {

                // 定义临时变量,用于交换变量
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;

            }
        }
    }

    // 遍历数组(排序后)
    for (int i = 0; i < length; i++) {
        printf("array[%d] = %d\n", i, array[i]);
    }
    return 0;
}

//
//  main.c
//  冒泡排序
//
//  Created by king on 15/10/20.
//  Copyright © 2015年 king. All rights reserved.
//

#include <stdio.h>

int main(int argc, const char * argv[]) {
    // 定义数组
    int array[5] = {23, 56, 36, 89, 50};

    // 计算数组长度
    int length = sizeof(array) / sizeof(array[0]);

    // 遍历数组(无序)
    for (int i = 0; i < length; i++) {
        printf("array[%d] = %d\n", i, array[i]);
    }

    printf("----------------------\n");

    for (int i = 0; i < length - 1; i++) {

        for (int j = 0; j < length - 1 -i; j++) {
            // 两两比较
            if (array[j] > array[j+1]) {
                // 交换变量
                int temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }

    // 遍历数组(排序后)
    for (int i = 0; i < length; i++) {
        printf("array[%d] = %d\n", i, array[i]);
    }

    return 0;
}

//
//  main.c
//  折半查找
//
//  Created by king on 15/10/20.
//  Copyright © 2015年 king. All rights reserved.
//

#include <stdio.h>
int findKey(int array[], int length, int key);

int main(int argc, const char * argv[]) {

    // 定义数组
    int nums[10] = {15, 20, 35, 40, 46, 56, 59, 68, 76, 90};
    // 数组长度
    int length = sizeof(nums) / sizeof(nums[0]);
    // 需要查找的key
    int key = 46;

    printf("%d == nums[%d]\n", key, findKey(nums, length, key));
    return 0;
}

#pragma mark --查找key
int findKey(int array[], int length, int key)
{
    int min, max, mid;
    min = 0;
    max = length - 1;

    // 只要还在我们的范围内就需要查找
    while (min <= max) {
        // 计算中间值
        mid = (min  + max) / 2;
        if (key > array[mid]) {
            min = mid + 1;
        }else if (key < array[mid])
        {
            max = mid - 1;
        }else
        {
            return mid;
        }

    }
    return -1; // 找不到就返回 -1
}

进制查表法

//
//  main.c
//  进制查表法
//
//  Created by king on 15/10/20.
//  Copyright © 2015年 king. All rights reserved.
//

//  十进制转十六进制 八进制 二进制

#include <stdio.h>
void total(int value, int base, int offset);
void ptintBinary(int num);
void printfOct(int num);
void printfHex(int num);

int main(int argc, const char * argv[]) {

    printf("十六进制:"),printfHex(101010);
    printf("八进制:"),printfOct(10545);
    printf("二进制:"),ptintBinary(9546);

    return 0;
}

#pragma mark -- 转十六进制
void printfHex(int num)
{
    total(num, 15, 4);
}

#pragma mark -- 转八进制
void printfOct(int num)
{
    total(num, 7, 3);
}
#pragma mark -- 转二进制
void ptintBinary(int num)
{
    total(num, 1, 1);
}

/**
 *  转换所有的进制
 *
 *  @param value  需要转换的数值
 *  @param base   需要&上的数
 *  @param offset 需要右移的位数
 */
void total(int value, int base, int offset)
{
    // 1.定义一个数组, 用于保存十六进制中所有的取值
    char charValues[] = {‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘};
    // 2.定义一个数组, 用于保存查询后的结果
    char results[32] = {‘0‘};
    // 3.定义一个变量, 用于记录当前需要存储到查询结果数组的索引
    int pos = sizeof(results)/ sizeof(results[0]);

    while (value != 0) {
        // 1.取出1位的值
        int res = value & base;// 1 7 15
        // 2.利用取出来得值到表中查询对应的结果
        char c = charValues[res];
        // 3.存储查询的结果
        results[--pos] = c;
        // 4.移除二进制被取过的1位
        value = value >> offset;// 1 3 4
    }

    // 4.打印结果
    for (int i = pos; i < 32; i++) {
        printf("%c", results[i]);
    }
    printf("\n");

}
时间: 2024-12-20 15:15:36

C语言基础算法的相关文章

c/c++面试总结---c语言基础算法总结2

算法是程序设计的灵魂,好的程序一定是根据合适的算法编程完成的.所有面试过程中重点在考察应聘者基础算法的掌握程度. 上一篇讲解了5中基础的算法,需要在面试之前熟练掌握,本篇讨论剩余的基础算法. 先看一个面试题目:设计一个函数,求一个给定字符串中所有数字的和. 例如:给定字符串 “abc12fas123dfaf34”, 计算结果为:12 + 123 + 34 = 169 其中包括了:求和方法.字符串遍历方法.数字字符转成数字的方法 多位数字组合成整数的方法 必须熟练掌握以上四种基础算法,才能解决该问

C语言基础--算法

算法的基本概念 以下只是个人学习的笔记,由于我也是刚接触,所以有可能有错误,如有错误,请指出 算法:是解决一个问题的完整的步骤描述,是解决问题的策略.规则.方法. 1.算法的特征:有穷性.确定性.可行性.输入.输出 (1).有穷性:一个算法必须在执行有穷步之后结束并且在每一步都在有穷时间内完成,不能无限的 执行下去. 算法不能出现死循环,如计算一个累加的程序,必须要指定一个最终要加的值,如果不指定,那么这个程序将会死循环,如计算1+2+3+···+99+100,如果没有指定最终的值100,那么他

基础算法

c语言基础算法大全 冒泡排序 选着排序 插入排序 快速排序 shell排序. 合并排序. 下面是各个排序算法的实现: 冒泡排序 void bobuleSort(int a[], int len) { int i,j,flag =1; for(i = 0; i<len; i++) { for(int j =len-1; j>i; j--) { if(a[j] <= a[i]) { int tmp = a[j]; a[j] = a[i]; a[i] = tmp; flag = 0; } }

C语言的10大基础算法

C语言的10大基础算法 算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手.本文是近百个C语言算法系列的第二篇,包括了经典的Fibonacci数列.简易计算器.回文检查.质数检查等算法.也许他们能在你的毕业设计或者面试中派上用场. 1.计算Fibonacci数列 Fibonacci数列又称斐波那契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21. C语言实现的代码如下: /* Displ

C语言排序算法复习

排序算法有很多种,这里在复习和分析的基础上,做一个自己的总结: 首先要知道有哪些排序算法,google一下,有云C语言7大经典排序算法(也有8大).主要包括冒泡排序,快速排序,选择排序,插入排序,希尔排序,归并排序,堆排序,8大的还有基数排序.各有各的版本,代码写法也各不相同.所以这里以整理思路为先,代码只是作为自己的一个备份. 搞清楚的概念:稳定排序和不稳定排序,就看序列中两个值相等的数,排完序之后的相对位置是否改变,如果改变了就不稳定. 内部排序和外部排序,只用到内存即可完成排序的就叫内部排

最最最最最最最最基础的C---C简介和基础算法

C简介 C是一门程序设计语言,面向过程的语言.于1972至1973年设计出来的语言. C具有32个关键字,9种控制语句,34种运算符. 函数是C的基本单位:一个C程序的执行总是从main函数开始的. C程序运行步骤:源程序--编译-->目标文件--执行-->可执行目标程序. 基础算法 完整的程序设计=数据结构+算法+程序设计方法+语言工具 算法特效: 1.有穷性:一个算法包含有限的操作步骤 2.确定性:确定算法的每一个步骤都是确定的 3.有零个或多个输入 4.有一个或多个输出 5.有效性:算法

MiS603 开发板2.2 Verilog HDL硬件语言基础

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ 2.2 Verilog HDL硬件语言基础 2.2.1 技术背景 大规模集成电路设计制造技术和数字信号处理技术,近三十年来,各自得到了迅

java--java语言基础(4)--黑马程序员

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- java语言基础(4) 主要内容:<循环结构while.do...while.for.嵌套循环.跳转> 1 循环结构while语句的格式和基本使用 第一种循环结构: while循环: 格式: while(逻辑表达式){ //循环体代码.需要重复执行的代码 } 说明: 1.逻辑表达式:必须返回一个boolean类型的结果: 2.如果返回true:执行循环体: 3.循环体执行完毕,回到上面的&q

基础算法(一)

首先必须得说本人对算法研究不深,一些简单的就得想半天,老是这样感觉不太好,遂记录下一些常见的基础算法,避免尴尬.不足之处请各位多多指教. 其次,用vs写C语言程序时可能会出现如下错误:错误 C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online hel