排序算法之希尔排序
来源:互联网 发布:中国历史故事网软件 编辑:程序博客网 时间:2024/04/28 19:44
回到目录
1、基本思想
在要排序的一组数中,按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。
回到目录
2、代码示例
package sort;/** * 希尔排序(最小增量排序) * */public class ShellSort { public void TestSort() { int a[]={1,54,6,3,78,34,12,45,56,100}; sort(a); sort2(a); } public void sort(int arr[]){ //数组长度 int len=arr.length; //临时变量 int temp=0; //增量d(n/2,n为要排序数的个数) int d=len; while(true){ d=d/2; //直接插入排序 for(int k=0;k<d;k++){ for(int i=k+d;i<len;i+=d){ int j=i-d; temp=arr[i]; for(;j>=0&&temp<arr[j];j-=d){ arr[j+d]=arr[j]; } arr[j+d]=temp; } } if(d==1){ break; } } for(int i=0;i<len;i++){ System.out.print(arr[i]+" "); } } public void sort2(int arr[]){ //数组长度 int len=arr.length; int i, j, gap; for (gap = len / 2; gap > 0; gap /= 2) {//步长 for (i = 0; i < gap; i++) //直接插入排序 { for (j = i + gap; j < len; j += gap) if (arr[j] < arr[j - gap]) { int temp = arr[j]; int k = j - gap; while (k >= 0 && arr[k] > temp) { arr[k + gap] = arr[k]; k -= gap; } arr[k + gap] = temp; } } } for (i = 0; i < arr.length; i++){ System.out.print(arr[i] + " "); } }}
回到目录
3、效率分析
出处:http://hehaiyang.cnblogs.com/
本博客内容主要以学习、研究和分享为主,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
0 0
- 算法之希尔排序
- 算法之希尔排序
- 算法之希尔排序
- 算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 排序算法之希尔排序
- 类和对象
- Activity的启动模式及应用场景
- 系列:iOS开发-VC生命周期
- 4 Springboot中使用redis存储集合数据,并模拟条件查询、分页读取
- Python知识点总结
- 排序算法之希尔排序
- .net 开发日志
- Mac sftp 设置使用公钥认证
- 飞得更高(五)下马威
- 点阵字库在JAVA中的实现
- effective--构造器和静态工厂方法
- Spring4整合Hibernate5
- HTML5/CSS3 移动平台对 META 标签的定义
- spring事务和对象锁