提到希尔排序,首先要知道插入排序。插入排序属于一种简单排序,它假设了数组中的数据部分有序,也就是说标志位左侧的数据已经有序,标志位右侧数据无序。然后用标志位与前面的数据进行比较,插入适当的位置。具体的实现代码如下:
/*插入排序*/
       
        for(i = 1 ; i<arr.length;i++){
            temp = arr[i];
            j = i;
            while(j>0&&arr[j-1]>temp){
                arr[j] = arr[j-1];
                j--;
            }
            arr[j] =temp;
        }
    希尔排序实际上是对插入排序的一种优化,主要是为了节省数组移动的次数。具体做法是,扩大数字之间的比较间隔,如何是10个数字进行排序的话,根据公式h=h*3+1,那么比较间隔为4。也就是说是数组下标{0,4,8};{1,5,9};{2,6};{3,7}进行比较,然后将比较间隔降低,根据公式h=(h-1)*3得1,在进行比较(实际就是插入排序的方法了),左后得出结果。具体代码如下:
/*希尔排序*/
   
       
  while(arr.length/3>h){
            h = h*3+1;
        }
        while(h>0){
            for(i = h; i >0 ; i++){
                temp = arr[i];
                j =i;
                while(j >h-1 && arr[j-h]>temp ){
                    arr[j] = arr[j-h];
                    j -=h;
                   
                }
                arr[j] = temp;
            }
            h = (h-1)/3;
        }
    希尔排序在数字比较少的情况下显得并不是十分优秀,但是对于大数据量来说,它要比插入排效率高的多。