functionshell_sort(arr,len){let j,d=len>>1,tmp;while(d>0){for(let i = d ; i < len ; i++){
tmp = arr[i];
j = i-d;while(j>=0&&tmp>arr[j]){
arr[j+d]= arr[j];
j = j - d;}
arr[j+d]= tmp;}
d>>=1;}}let arr =[23,43,1,34,54,23,65,78,9]shell_sort(arr,arr.length)
console.log(arr)
堆排序
functiondown(u,len){let t = u;if(u*2<=len&&arr[u*2]>arr[t]) t=u*2;if(u*2+1<=len&&arr[u*2+1]>arr[t]) t=u*2+1;if(t!=u){[arr[u],arr[t]]=[arr[t],arr[u]]down(t,len);}}let arr =[23,43,1,34,54,23,65,78,9]
arr.unshift(0);
len = arr.length-1for(let i =(len>>1);i>0;i--)down(i,len);//以O(n)的复杂度建堆for(let i = len ; i >=2; i--){//[arr[1],arr[i]]=[arr[i],arr[1]]down(1,i-1);}
arr.shift();
console.log(arr)