无聊时总结总结算法之02排序(希尔 完结)
来源:互联网 发布:社会主义中级阶段 知乎 编辑:程序博客网 时间:2024/05/22 06:13
//two way 经过思考后 one way 中第一次原因后 因为// /////////////////////////////错的?????? 我晕了??// /////////////////////////////(问题在于两两相比较不完全,如例子的第二次gap = 5 / 2 = 2// //////////////////////////////排序后// 13 27 49 55 4 49 38 65 97 26// 1A 1B 1C 1D 1E// 2A 2B 2C 2D 2E)// ////////////////////////////1A 1B 比较,1B 1C 比较 但是1A和1C却没有比较!!!!// /////////////////////////////请诸位自己调试一下!!!!!!!!!!!!!!这很重要!!!!/* for(int i=0; i<gap; i++) { //因为要有很多组 for(int j=gap+i;j<len;j += gap) { if(a[j]<a[j-gap]) { int temp =a[j]; a[j] = a[j-gap]; a[j-gap] = temp; } } }*/// ////////////////////////////解决方法:对1A 1B 1C 1D 1E进行 直接插入排序!!! 所以:void ShellSort(int* a,int len){ int gap;//zu for(gap=len/2;gap>0;gap /=2) { for(int i=0; i<gap; i++)//gap个组 { //因为组有很多元素 for(int j=gap+i;j<len;j += gap) { if(a[j]<a[j-gap]) {// //////直接插入排序 int temp =a[j];//复制哨兵 int k = j-gap; //k 和 i 的意义不一样 for( ;k>=0&&a[k]>temp;k -=gap) { a[k + gap] = a[k]; //后移 } a[k+gap] = temp;//插入哨兵 元素 } } } }}
- 同理将其简单化:
void ShellSort2(int* a, int n){ int j, gap; for (gap = n / 2; gap > 0; gap /= 2) for (j = gap; j < n; j++)//从数组第gap个元素开始 if (a[j] < a[j - gap])//每个元素与自己组内的数据进行直接插入排序 { int temp = a[j]; int k = j - gap; while (k >= 0 && a[k] > temp) { a[k + gap] = a[k]; k -= gap; } a[k + gap] = temp; }}
1 0
- 无聊时总结总结算法之02排序(希尔 完结)
- 无聊时总结总结算法之02排序(直接插入+希尔)
- 无聊时总结总结算法之03简单选择排序
- 无聊时总结总结算法之04冒泡排序
- 无聊时总结总结算法之05快速排序
- 无聊时总结总结算法之06归并排序
- 无聊时总结总结算法之07堆排序
- 无聊时总结总结算法之08桶排序
- 排序算法总结之希尔排序
- 排序算法总结之希尔排序
- 排序算法总结之希尔排序
- 排序算法总结---希尔排序
- 排序算法总结---希尔排序
- 希尔排序算法知识总结
- iOS算法总结-希尔排序
- 排序算法总结之希尔排序 Shell Sort
- 无聊时总结总结算法之01递归
- 无聊时总结总结算法之09基数排序
- oc之内存管理
- 安卓第九夜 狂风
- 一个工作快八年的老IT人士这几年沉浮总结的职场经验教训
- 关于分布式事务、两阶段提交协议、三阶提交协议(2pc 3pc 都无法保证彻底一致性,除了Paxos 协议)
- MVC,MVP 和 MVVM 的图示
- 无聊时总结总结算法之02排序(希尔 完结)
- 三目运算符
- 安卓第十夜 亚当的诞生
- Error: Can't set headers after they are sent.
- Android之Button点击事件处理的几种方式
- hdu3183RMQ
- python:open/文件操作
- 键盘录入
- oc学习笔记之协议与分类