希尔排序其实和直接插入排序差不多,只不过在直接插入排序前把数组变为基本有序的状态,效率有所提高。但也因此,希尔排序是不稳定的。
#include <iostream>
using namespace std;
void shellsort(int a[],int len)
{
int h,i,j,tmp; h为步长
{
int h,i,j,tmp; h为步长
for(h = len/2; h > 0; h = h/2) //希尔排序只比直接插入排序多了这一步
{
for(i = h; i < len; i++)
{
tmp = a[i];
for(j = i - h; j >= 0 && tmp < a[j]; j -= h)
{
a[j + h] = a[j];
}
a[j + h] = tmp;
}
}
{
for(i = h; i < len; i++)
{
tmp = a[i];
for(j = i - h; j >= 0 && tmp < a[j]; j -= h)
{
a[j + h] = a[j];
}
a[j + h] = tmp;
}
}
}
int main()
{
int a[] = {1,4,2,6,7,3,9,14,11,32,21};
int length = sizeof(a)/sizeof(a[0]);
{
int a[] = {1,4,2,6,7,3,9,14,11,32,21};
int length = sizeof(a)/sizeof(a[0]);
shellsort(a,length);
for(int i = 0; i < length; i++)
{
cout << a[i] << " ";
}
cout << endl;
return 0;
}
{
cout << a[i] << " ";
}
cout << endl;
return 0;
}