希尔排序
1 /** 2 * //希尔排序,又名减小增量排序 3 * //算法思想:首先选择一个步长,初定gap为n/2,然后从i=gap的位置开始与i-gap比较 4 * //将比较后小的数放在i-gap的位置,然后将i=i-gap,继续比较i与i-gap的大小,直至i-gap的位置超过数组索引。 5 * //当上述整个循环结束后,即整个过程只比较了索引初始值为i=gap时前的顺序,因此接下来i以+1的速度继续向后移动 6 * //当i移动到超过索引时,此gap为n/2的过程结束,然后将gap换为gap=n/2/2,继续上述所有过程,最终归结为gap为1的插入排序。 7 * @author Jey 8 * 9 */ 10 11 12 public class Shell { 13 public void ShellSort(int[] A,int n){ 14 int temp,tempi; 15 for(int gap=n/2;gap>0;gap/=2) //gap为步长,初始为n/2,此次循环每次步长缩短一倍 16 for(int i=gap;i<n;i++){ //当gap确定后,进行初始索引为gap的循环,使当前步长下的索引在gap差距的两个值有序 17 tempi=i; 18 while(tempi-gap>=0){ //保证此时索引的前gap长度的索引没有越界 19 if(A[tempi]<A[tempi-gap]){ 20 temp=A[tempi]; 21 A[tempi]=A[tempi-gap]; 22 A[tempi-gap]=temp; 23 } 24 tempi=tempi-gap; ////每次的索引向前移动gap个长度 25 } 26 } 27 } 28 }
参考博客:http://blog.csdn.net/morewindows/article/details/6668714
jeyfang