内部排序
2015-10-23 15:54
323 查看
/*插入排序*/ /*直接插入: 稳定 O(n^2)*/ void insertion_sort(int *a, int num) { int tmp; for(int i = 1; i < num; i++) { tmp = a[i]; int j; for(j = i - 1; j >= 0 && tmp < a[j]; j--) { a[j + 1] = a[j]; } a[j + 1] = tmp; } } /*希尔排序:不稳定 时间复杂度与增量序列有关*/ /*选择排序*/ /*直接选择:不稳定 O(n^2)*/ void selection_sort(int *a, int num) { int k, tmp; for(int i = 0; i < num - 1; i++) { k = i; int j; for(j = i + 1; j < num; j++) { if(a[j] < a[k]) k = j; } tmp = a[i]; a[i] = a[k]; a[k]= tmp; } } /*堆排序:不稳定 O(nlogn)*/ /*交换排序*/ /*冒泡排序:稳定 O(n^2)*/ void bubble_sort(int *a, int num) { int tmp; for(int i = 0; i < num - 1; i++) { for(int j = 0; j < num - i - 1; j++) { if(a[j] > a[j + 1]) { tmp = a[j]; a[j] = a[j + 1]; a[j + 1] = tmp; } } } } /*冒泡排序优化 稳定 O(n^2)*/ void bubble_sort1(int *a, int num) { int tmp; num--; while(num > 0) { int j = 0; for(int i = 0; i < num; i++) { if(a[i] > a[i + 1]) { tmp = a[i]; a[i] = a[i + 1]; a[i + 1] = tmp; j = i; } } num = j; } } /*快速排序:不稳定 O(nlogn)*/ void quick_sort(int *a, int low, int high) { if(low < high) { int i = low, j = high; int tmp = a[low]; while(i != j) { while(i < j && a[j] > tmp) j--; if(i < j) a[i++] = a[j]; while(i < j && a[i] < tmp) i++; if(i < j) a[j--] = a[i]; } a[i] = tmp; quick_sort(a, low, i - 1); quick_sort(a, i + 1, high); } } /*合并排序:稳定 O(nlogn)*/ /*基数排序:稳定*/
相关文章推荐
- highCharts tootip 内容太长,自动换行.
- Django模板标签中使用js变量
- PHP框架CodeIgniter入门使用(2)
- Android BitmapShader 实战 实现圆形、圆角图片
- 07版去掉页眉文字下的横线
- OpenGL ES中的顶点数组、顶点属性、缓冲区对象
- Undefined symbols for architecture i386: "_OBJC_CLASS_$_KKGridView", referenced from:
- shell脚本在执行时,向脚本传递参数
- 限制EditText 输入Emjoy 表情符号
- Unity编译器VS下Shader高亮插件NShader安装
- 出现错误ActivityManager: Warning: Activity not started
- IOS Sent Events 事件
- 《关于VirtualBox在桥接模式下无法联网 解决方案》
- BZOJ 3991 SDOI 2015 寻宝游戏(异象石) LCA + Set + DFS序
- 使用jasperreport生成报表
- ContentProvider详解
- Request中的各种方法
- freecms使用jsoup和quartz抓取其他网站内容
- Java并发编程--理解ThreadLocal
- debug.exe 指令