java算法(一)——排序算法(下)之 shell排序

前面介绍过插入排序,其实shell排序的思想跟插入排序一样。具体过程如下:
(1)将n个元素的数组分成n/2个数字序列,第1个与第n/2+1个为一组。
(2)对这些元素插入排序
(3)然后,变为n/4个数字序列,再次排序。
(4)不断重复,直到序列变为1个。
数字4 5 8 7 1 6 3 7
序号0 1 2 3 4 5 6 7

第一次4 1|5 6|8 3|7 7四组
排序后:1 5 3 7 4 6 8 7
第二次1 7 8|5 4 7|3 6三组
排序后:1 4 3 7 5 6 8 7
第三次:1 3 5 8|4 7 6 7两组
排序后:1 4 3 6 5 7 8 7
第四次:1 4 3 6 5 7 8 7一组
排序后:1 3 4 5 6 7 7 8

程序:

static void shellSort(int[] a)  //Shell排序
    {
        int i,j,h;
        int r,temp;
        int x=0;

        for(r=a.length/2;r>=1;r/= 2)                        //划组排序
        {
            for(i=r;i<a.length;i++)
            {
                temp=a[i];
                j=i-r;
                while(j>=0 && temp<a[j])
                {
                    a[j+r]=a[j];
                    j-=r;
                }
                a[j+r]=temp;
            }
        }
    }

因为插入排序,对已经有一定顺序的序列排序效率会提高,希尔排序就是基于这个思想进行的。

猜你喜欢

转载自blog.csdn.net/h9f3d3/article/details/51934468