希尔排序详见大话数据结构p389
1 //希尔排序(shellsort) 2 3 //希尔排序的主要思想是:在每一次的粗排序中使得整个记录集是基本有序的。 4 //采用的是增量跳跃分割的策略,使得在每个子序列里进行直接插入排序。 5 //主要的成就是减少了时间复杂度,时间复杂度为O(n^(3/2)) 6 7 8 9 void ShellSort(sqlist* L) 10 { 11 12 int i,j; 13 increment = L->length; 14 do 15 { 16 increment = increment/3; //增量序列 17 for(i=increment+1;i<L->length;i++) 18 { 19 if(L->r[i]<L->r[i-increment]) //只有右边的关键字小于左边的关键字,才进行互换 20 { 21 L->r[0]=L->r[i]; 22 for (j=i-increment;j>0 && L->r[0]<L->r[j];j-=increment) 23 24 L->r[j+increment]=L->r[j]; 25 26 L->r[j+increment]=L->r[0]; //j-=increment => j=j+increment 插入操作 27 } 28 } 29 } 30 while(increment>1); 31 }
浙公网安备 33010602011771号