希尔排序(Shell Sort)
来源:互联网 发布:软件出售 编辑:程序博客网 时间:2024/06/07 02:21
/** * 3.3 希尔排序: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组; * 所有距离为d1的倍数的记录放在同一个组中,先在各组内进行直接插入排序; * 取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1); * 即所有记录放在同一组中进行直接插入排序为止,该方法实质上是一种分组插入方法. * * EX: int[] nums={8,1,4,2,23,10}; < * * d=length/2=3 8,1,4,2,23,10 * | | * 2,1,4,8,23,10 * * 2,1,4,8,23,10 * | | * 2,1,4,8,23,10 * * 2,1,4,8,23,10 * | | * 2,1,4,8,23,10 * * d=d/2=1 2,1,4,8,23,10 * | | | | | | * 1,2,4,8,10,23 * * 希尔排序是不稳定的. * 希尔排序的时间性能优于直接插入排序. * 希尔排序的平均时间复杂度为O(nlogn). * */ public static void shellSort(int[] nums) { int d=nums.length; int insert; do{ d/=2; for(int i=0;i<d;i++){ for(int j=i+d;j<nums.length;j=j+d){ if(nums[j]<nums[j-d]){ insert=nums[j]; for(int k=j-d;k>=0;k=k-d){ nums[k+d]=nums[k]; if(k==i){ nums[i]=insert; } else if(insert>=nums[k-d]){ nums[k]=insert; break; } } } } } }while(d!=1); }
0 0
- Shell Sort 希尔排序
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序/shell sort
- 希尔排序(Shell Sort)
- 希尔排序 shell sort
- 希尔排序Shell Sort
- 希尔排序(shell sort)
- 希尔排序Shell sort
- 希尔排序 shell sort
- 希尔排序Shell sort
- 希尔排序shell sort
- Shell Sort 希尔排序
- 希尔排序 shell sort
- 希尔排序(Shell Sort)
- Shell Sort(希尔排序)
- 杭电oj编码2004
- CodeForces 560D Equivalent Strings【递归+贪心】
- 学习Cocos的第一步,认识Cocos中的Ref类
- Linux下udev和mdev详解
- 二分法插入排序(Binary Sort)
- 希尔排序(Shell Sort)
- 归并排序(Merge Sort)
- 杭电oj编码2003
- c++函数的几种关系
- 杭电oj编码2002
- 基数排序(Radix)
- 杭电oj编码2001
- 用window.name来解决不同网页间的数据通信
- 杭电oj编码2000