排序五之希尔排序(缩小增量排序)
2016-02-03 14:58
197 查看
Shell Sort
冒泡排序算法,选择排序算法和插入排序算法的思路比较直观,但排序的效率都比较低。对于遇到大量的数据需要排序时,Shell排序便是其他更为高效的算法之一。
Sell排序算法严格来说基于插入排序的思想,又称希尔排序或缩小增量排序。Shell排序的基本流程如下:
1:将有n个元素的数组分成n/2个数字序列,第1个数据与第n/2-1个数据为一对,……以此类推;
2:一次循环是每个序列排好序;
3,:然后变成n/4个序列,再次排序;
4:不断重复上述过程,随着序列最后变为1个,也就完成了整个排序;
Shell Sort
冒泡排序算法,选择排序算法和插入排序算法的思路比较直观,但排序的效率都比较低。对于遇到大量的数据需要排序时,Shell排序便是其他更为高效的算法之一。
Sell排序算法严格来说基于插入排序的思想,又称希尔排序或缩小增量排序。Shell排序的基本流程如下:
1:将有n个元素的数组分成n/2个数字序列,第1个数据与第n/2-1个数据为一对,……以此类推;
2:一次循环是每个序列排好序;
3,:然后变成n/4个序列,再次排序;
4:不断重复上述过程,随着序列最后变为1个,也就完成了整个排序;
#include<stdio.h> #include<stdlib.h> #include<time.h> #define SIZE 10 void ShellSort(int *a,int len) { int i,j,k; int r,temp; for(r=len/2;r>=1;r/=2) { for(i=r;i<len;i++) { temp=a[i]; j=i-r; while(j>=0&&temp<a[j]) { a[j+r]=a[j]; j-=r; } a[j+r]=temp; } } } int main() { int i; int shuzu[SIZE]; srand(time(NULL)); for(i=0;i<SIZE;i++) shuzu[i]=rand()/1000+100; printf("排序前的数组为:\n"); for(i=0;i<SIZE;i++) printf("%d ",shuzu[i]); printf("\n"); ShellSort(shuzu,SIZE); printf("排序后的数组为:\n"); for(i=0;i<SIZE;i++) printf("%d ",shuzu[i]); printf("\n"); return 0; }
相关文章推荐
- 一条SMS最大字符数,字符数达到多少按MMS处理
- SSH原理与运用(一)和(二):远程登录 RSA算法原理(一)和(二)
- hash算法 (hashmap 实现原理)
- input
- mysql or查询优化
- Android View事件机制 21问21答
- NLP系列(3)_用朴素贝叶斯进行文本分类(下)
- setContentView(R.layout.XXXXX) 没设置到 就开始 initViews() 会导致空指针
- Redis学习手册(Sorted-Sets数据类型)
- Android进阶推荐书籍
- NLP系列(3)_用朴素贝叶斯进行文本分类(下)
- 开通博客有感!
- nat123 登陆时提示【连接服务器失败】
- android使用MPAndroidChart开源图表折线图
- 【Linux学习011】sed命令详解
- HYSBZ/BZOJ 1011 [HNOI2008] 遥远的行星 - 模糊答案&暴力
- Bitmap.recycle引发的血案
- Android RecycleView(一)
- C#学习小记
- 体验 Java 并发 api,用不同方式实现信号量锁(Semaphore)(7)