// // 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