希尔排序:先将待排序列分割成若干个子序列,分别进行直接插入排序,基本有序后再对整个序
列进行直接插入排序。(不稳定)
时间复杂度
O
(
n
3
/
2
)
O(n^{3/2})
O(n3/2)
#include<iostream>
using namespace std;
void ShellSort ( int a[], int n )
{
int dk = n/2;
while ( dk>=1 ) {
// 一趟希尔排序,对 dk 个序列分别进行插入排序
for (int i=dk; i<n; i++ ) {
int x = a[i];
int j=0;
for (j=i-dk; j>=0 and x<a[j]; j-=dk )
a[j+dk] = a[j];
a[j+dk] = x;
}
// 缩小增量
dk = dk/2;
}
}
int main(){
int len=6;
int a[]={24,85,47,53,30,91};
cout<<"original array:"<<endl;
for(int i=0;i<len;i++){
cout<<a[i]<<endl;
}
cout<<endl;
ShellSort(a,len);
cout<<"shell sort :"<<endl;
for(int i=0;i<len;i++){
cout<<a[i]<<endl;
}
cout<<endl;
return 0;
}