希尔排序

 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

posted @ 2016-03-08 16:54  jeyfang  阅读(155)  评论(0编辑  收藏  举报