希尔排序(java)

来源:互联网 发布:淘宝卖假货美妆店铺 编辑:程序博客网 时间:2024/05/22 00:34

希尔排序是插入排序的改良版,但是比较难理解,他是把大的排序分解成越来越小范围的排序,最终最小的时候,完成整个排序。

举个小栗子:2 4 1 3 5 降序来排,具体请看代码

1.拿1和2比较,显然1<2 所以不交换

2.都后移一位 3和4比较 3<4 不交换

3.接着后移一位,5和1比较,5>1 交换,变成

2 4 5 3 1

只要交换了,继续比较,拿5和2比较,5>2 交换 变成

5 4 2 3 1

细心的朋友都看出来,要比较的两个数中间都空开一个,具体空几个要看第一次的时候和第一数比较的时候空几个。

4.然后长度再除以2,变为1,那就从脚标为1和第一个数比较,和上面一样,这里就不重复了...

5.最后长度除以2<0时就结束了 。


后面链接是一个希尔排序的舞蹈,可以更好地理解希尔排序。


public class example02 {public static void main(String[] args) {// TODO Auto-generated method stubint[] a ={1,2,3,4,5,6};for(int i=a.length/2;i>0;i/=2)//确定从哪开始{for(int j=i;j<a.length;j++)//实际控制的角标{int temp=a[j];//复制一份,比较和赋值时用,而又不改变原来的数据int k=0;for(k=j;k>=i;k-=i)//核心{if(temp>a[k-i])a[k]=a[k-i];elsebreak;}a[k]=temp;}}for(int i:a)System.out.print(i+" ");}}

1 0