排序 - 希尔排序(缩小增量排序)
2015-07-05 14:54
489 查看
排序过程:先取一个正整数d1 < n, 把所有相隔d1的记录放一组,每个组内进行直接插入排序;然后d2 < d1,重复上述分组和排序操作;直至di = 1,即所有记录放进一个组中排序为止。
希尔排序是不稳定的。
![](http://img.blog.csdn.net/20150705144636705)
代码:
希尔排序是不稳定的。
代码:
#include <iostream> #include <cstdio> #include <ctime> #include <iomanip> using namespace std; int arr[10000]; void shellSort(int *a, int len) { int gap = len; do { gap = gap / 3 + 1; // 业界统一实验的,平均最好情况,经过若干次后,收敛为1 for (int i = gap; i < len; i += gap) { int k = i; int tmp = a[k]; for (int j = i - gap; j >= 0 && a[j] > tmp; j -= gap) { a[j + gap] = a[j]; k = j; } a[k] = tmp; } } while (gap > 1); } void printArray(int *a, int len) { for (int i = 0; i < len; i++) { if (i != 0 && i % 10 == 0) { cout << endl; } cout << setw(3) << a[i] << ' '; } cout << endl; } int main() { srand(time(0)); cout << "Please input length of array: "; int len; cin >> len; for (int i = 0; i < len; i++) { arr[i] = rand() % 100; } cout << "Before sorting:\n"; printArray(arr, len); shellSort(arr, len); cout << "After sorting:\n"; printArray(arr, len); return 0; } /* Please input length of array: 20 Before sorting: 15 40 55 7 80 67 17 36 23 96 54 29 85 81 57 77 63 54 28 78 After sorting: 7 15 17 23 28 29 36 40 54 54 55 57 63 67 77 78 80 81 85 96 */
相关文章推荐
- 排序 - 希尔排序(缩小增量排序)
- sql优化
- 设计模式--六大原则
- 非限制定语从句的用法
- The specified JRE installation does not exist m2eclipse build Maven项目报错的问题
- Win8笔记本电脑打开盖子自动开机的解决办法
- 栈的C++实现
- Jqgrid的用法总结与分页功能的拓展
- TCP应用编程
- 设计模式之外观模式
- ORA-28000账户被锁和解锁
- Supervisor行为分析和实践
- Adobe After Effects
- 【NOI2010】海拔【平面图最小割】
- Ubuntu链接XP32位虚拟机上的orace11g数据库
- [转] POJ DP问题
- 启动android模拟器后,界面卡住拖不动的解决方案
- Machine Learning—Linear Regression
- 生活的计划 文章11章:嗅探
- halcon学习笔记——(11)Image,region,xld初步