# 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 --查找keyint 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"); }`

Top