zoukankan      html  css  js  c++  java
  • 排序算法-希尔排序(javascript)

    思想:是插入排序的改良方法,插入排序步长为1,希尔步长是从大到小调整。(成败在于步长的选择)

    function shellInsertSort(arr,dk){
    	//对顺序表arr做一次增量为dk的希尔排序
    	for(var i=dk+1;i<=arr.length;++i){
    		if(arr[i]<arr[i-dk]){  //需将arr[i]插入有序增量子表
    			arr[0]=arr[i];     //暂存在arr[0]
    			for(var j=i-dk;j>0 && arr[0]<arr[j];j-=dk){
    				arr[j+dk]=arr[j]; //记录后移,直到找到插入位置
    			}
    			arr[j+dk]=arr[0];
    		}
    	}
    }
    function shellSort(arr,dt,t){
    	//参数:待排记录,增量,次数
    	//按增量序列dt[0..t-1]对顺序表arr做t趟希尔排序
    	for(var k=0;k<t;++k){
    		shellInsertSort(arr,dt[k]); //一趟增量为dt[t]的希尔排序
    	}
    	return arr;
    }
    

    时间复杂度:

    O(nlogn)

    空间复杂度:

    与插入排序一样,O(1)

    特点:

    1.跳跃式的移动导致不稳定。

    2.不能用于链式结构。

    3.增量序列有各种取法,但应该使增量序列中的值没有除1之外的公因子,并且最后一个增量值必须等于1。

    4.记录总的比较次数和移动次数都比直接插入排序少,n越大效果越明显。所以适合初始记录无序,n较大的情况。

  • 相关阅读:
    玛里苟斯[清华集训2014 Day1]
    bzoj3585 mex
    Luogu 3793 由乃救爷爷
    Luogu5221 Product
    bzoj1834 [ZJOI2010]network 网络扩容
    CF650C Table Compression
    bzoj3211 花神游历各国
    bzoj1066 [SCOI2007]蜥蜴
    hdu2121 Ice_cream's world II
    Luogu2792 [JSOI2008]小店购物
  • 原文地址:https://www.cnblogs.com/PeriHe/p/7968053.html
Copyright © 2011-2022 走看看