C语言 - 排序总结
2015-08-10 21:05
465 查看
#import <Foundation/Foundation.h> #pragma mark - 快速排序 void sortArray(int array[] , int count) { if (count < 2) { return; } //记录开始 和 结尾的位置 int start = 0; int end = count - 1; //记录开始的数值 int temp = array[start]; //当开始 和 结尾 没有碰头的时候进行循环 将所有的数以array[start]为标准 分类,大的放左边 小的放右边 while (start < end) { //从后往前找到比temp 大的位置end while (start < end && temp < array[end]) { end --; } if (start < end) { //将end 位置上的数值赋值给 start位置的数 array[start] = array[end]; //将 start往后移一位 start ++; } //从前往后找到比temp 位置大的数的位置start while (start < end && temp > array[start]) { start++; } if (start < end) { //将start上比temp大的数值 赋值给end array[end] = array[start]; //end 往前移一位 end -- ; } //将temp 放到空得位置上 array[start] = temp; //对左右两边的数 再次重复刚才的过程 0 ~ start //左边 0 ~ start start个元素 sortArray(array, start); //右边 start ~ count count - start - 1 个元素 sortArray(array + start + 1 , count - start - 1); } } int main(int argc, const char * argv[]) { int a[10] = {0}; //随机赋值 for (int i = 0; i < 10 ; i++) { a[i] = arc4random() % (40 - 20 + 1) + 20; printf("%d ",a[i]); } printf("\n"); //定义一个标志量 int flag = 1;// 无序标志 1代表无序 0代表有序 for (int i = 0 ; i < 10 - 1 && flag == 1; i++) { flag = 0; // 每次开始冒泡前都先假定是数组是有序的 for (int j = 0; j < 10 - i - 1; j++) { if (a[j] > a[j + 1]) { flag = 1;// 如果发生数据交换,就说明数组是无序的 int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } for (int i = 0; i < 10 ; i ++) { printf("%d ",a[i]); } #pragma - mark 选择排序 //每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。 int minIndex = 0; for (int i = 0; i < 10; i ++) { //假设当前位置 就是最小下标 minIndex = i; //从当前坐标找比当前坐标对应数值小得数 for (int j = minIndex + 1; j < 10; j ++) { if (a[minIndex] > a[j]) { //记录最小下标的位置 minIndex = j; } } //将最小下标最小的数值 和第一个数交换 int temp = a[minIndex]; a[minIndex] = a[i]; a[i] = temp; } for (int i = 0; i < 10 ; i++) { printf("%d ",a[i]); } #pragma - mark 插入排序 //插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。 for (int i = 1; i < 10; i++) { //记录当前的下标 和 数值 int j = i; int temp = a[j]; //依次从当前位置 跟之前的元素比较 while (j > 0 && temp < a[j - 1] ) { a[j] = a[j - 1]; j --; } a[j] = temp; } for (int i = 0; i < 10 ; i++) { printf("%d ",a[i]); } #pragma mark - 快速排序 sortArray(a, 10); for (int i = 0; i < 10 ; i++) { printf("%d ",a[i]); } return 0; }
相关文章推荐
- c++ 使用算法时确保目标区间足够大
- C++/CLI
- C语言 - 经典程序设计100例
- C语言-07-预处理、typedef、static和extern
- C++使用简单的函数指针
- 一起talk C栗子吧(第三十四回:C语言实例--巧用溢出计算最值)
- C/C++ static使用方法注意
- JSON for C++ 介绍1
- C语言-FunctionPointer
- c与c++中struct区别
- C语言-DynamicMemory
- C++标准程序库笔记(2)
- [c语言]冒泡排序-------对折判断法
- [c语言]冒泡排序升级版------选择排序简单版
- C语言-Pointer(high)AndMacro
- C语言 sscanf,sprintf函数 使用总结
- C语言-Pointer
- C语言结构体的字节对齐实例【C语言笔试题】
- C语言-Struct
- C语言第一天