C 【冒泡 选择排序 & 折半查找】
2016-04-11 23:41
309 查看
#include <stdio.h> /** 冒泡 */ void bubbleSort(int number[], int length); /** 选择 */ void selectSort(int number[], int length); /** 折半 */ int findKeySort(int number[], int length, int key); /** 交换两数数值 */ void change(int number[], int i, int j); int main(int argc, const char * argv[]) { printf("请输入您要输入的数字个数,并包含一个数字88:\n"); int length; int key = 88; scanf("%d", &length); printf("请输入数字:\n"); int number[length]; for (int i = 0; i < length; i++) { scanf("%d", &number[i]); } bubbleSort(number, length); selectSort(number, length); printf("88是数组中的第%d个数字\n", findKeySort(number, length, key) + 1); return 0; } /** 冒泡 */ void bubbleSort(int number[], int length) { for (int i = 0; i < length - 1; i++) { // 比较的趟数 for (int j = 0; j < length - i - 1; j++) { // 每趟比较多少次(从number[0]开始,相邻两数比较,合适的交换。第一趟比较,也就是i=0时,需要比较 n-0-1 次) if (number[j] > number[j + 1]) { change(number, j, j + 1); } } } for (int i = 0; i < length; i++) { printf("%-d ", number[i]); } printf("\n"); } /** 选择 */ void selectSort(int number[], int length) { int k = 0; for (int i = 0; i < length - 1; i++) { // 除了最后一项,前n-1项都需要向后比较 k = i; for (int j = i + 1; j < length; j++) { // 每次选中的值需要和它后面的n-i个值比较(i+1 ~ n) if (number[k] > number[j]) { k = j; // 每一次外循环符合条件的值记录下坐标,暂时不交换数组元素的值 } } // 每次外循环结束才交换一次,相比冒泡交换的次数更少 change(number, i, k); } for (int i = 0; i < length; i++) { printf("%-d ", number[i]); } printf("\n"); } /** 折半 */ int findKeySort(int number[], int length, int key) { int max = length - 1; int min = 0; int mid; while (min <= max) { mid = (max + min) / 2; if (number[mid] < key) { min = mid + 1; } else if (number[mid] > key) { max = mid - 1; } else return mid; } return -1; } /** 交换两数数值 */ void change(int number[], int i, int j) { int temp = number[i]; number[i] = number[j]; number[j] = temp; }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 冒泡排序
- 如何写好 C main 函数
- Lua和C语言的交互详解
- C#冒泡法排序算法实例分析
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- C语言实现选择排序、冒泡排序和快速排序的代码示例
- C++实现对输入数字组进行排序