目的:掌握 希尔排序 的 基本思想与过程、代码实现、时间复杂度
1、基本思想与过程:
(1)按照某一增量,将数组分为若干子序列,对子序列分别进行插入排序。
(2)逐渐减小增量,并重复此过程,直到增量为1,此时序列基本有序,最后进行插入排序。
2、代码实现:
function shell_sort(arr){ var temp = 0; var len = arr && arr.length; var incre = len; while(true){ incre = incre/2; for(var k = 0;k<incre;k++){ //根据增量分为若干子序列 var count = 0; for(var i=k+incre;i<len;i+=incre){ count++; for(var j=i;j>k;j-=incre){ if(array[j]<array[j-incre]){ temp = array[j-incre]; array[j-incre] = array[j]; array[j] = temp; }else{ break; } } } console.log('根据增量'+incre+',将数组分为'+count) } if(incre <= 1){ break; } } return arr }
3、时间复杂度:O(n1.5)