30排序算法之希尔排序
排序算法之希尔排序
基本原理:
Donald.L.Shell设计的排序算法。
特点:
(1)缩小增量
(2)多遍插入排序
例如,选用增量序列(9,5,3,1)
4个增量,进行4遍插入排序 。
术语:
h-排序(h-sorted)
h-子序列(h-subsequence)
h-有序的(h-ordered)
希尔排序算法
void Shell_sort(int a[ ],int d[ ],int n,int t)
{ int i,j,h,k,x;
1. for(h=0;h<t;h++)
2. { k=d[h]; //当前增量为k
3. for(i=k;i<n;i++)
4. { for(x=a[i],j=i-k;j>=0&&x<a[j];)
5. { a[j+k]=a[j]; j-=k; }
6. a[j+k]=x; //x就位
}
}
}
示例
希尔排序源代码: //希尔排序 void ShellSort(int arr[],int n) { int i,j,temp; int d = n; do { d = d/3 + 1; for(i=d;i<n;i++) { if(arr[i] < arr[i-d]) { temp = arr[i]; for(j=i-d;j>=0&&arr[j]>temp;j-=d) { arr[j+d] = arr[j]; } arr[j+d] = temp; } } }while(d>1); } int main() { int arr[10]={3,5,8,2,4,13,9,1,16,7}; ShellSort(arr,10); for(int i=0;i<10;++i) printf("%d ",arr[i]); getchar(); return 0; }