#include<iostream> using namespace std; const int MAX = 1001; int l[MAX]; void ShellInsert(int n, int dk) { for(int i=dk+1;i<=n;i++) if(l[i]<l[i-dk]) { l[0]=l[i]; int j; for(j=i-dk;j>0&&l[0]<l[j];j+=dk) l[j+dk]=l[j]; l[j+dk]=l[0]; } } void ShellSort(int n) { for(int k=n/2;k>0;k/=2) ShellInsert(n, k); } int main() { int n; cin>>n; for(int i=1;i<=n;i++) cin>>l[i]; ShellSort(n); for(int i=1;i<=n;i++) cout<<l[i]<<" "; cout<<endl; return 0; }
原文:http://www.cnblogs.com/KennyRom/p/6251160.html