希尔(shell)排序

来源:互联网 发布:qt wifi windows 编辑:程序博客网 时间:2024/06/13 06:27

基本思想:算法先将要排序的一组数按某个增量dn/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。

希尔排序的时间复杂性在Onlog2n)和On2)之间,大致为On1. 3)。希尔排序是不稳定的排序算法。

void ModInsSort(int Array[],int n,int delta){int i,j;for(i=delta;i<n;i+=delta)for(j=i;j<=delta;j-=delta){if(Array[j]<Array[j-delta])swap(Array[j],Array[j-delta]);elsebreak;}}void ShellSort(int Array[],int n){int i,delta;for (delta=n/2;delta>0;delta/=2)for(i=0;i<delta;i++)ModInsSort(&Array[i],n-i,delta);}

 

 

void ShellSort(int array[],int n){int d,i,j,temp;for(d=n/2;d>=1;d=d/2){for(i=d;i<n;i++){temp=array[i];for(j=i-d;(j>=0) && (array[j]>temp);j=j-d){array[j+d]=array[j];}array[j+d]=temp;}}}