希尔排序(最后一步进行的是直接插入排序)
:以多个不同增量进行多次插入排序,增量不断减少,直至为1,进行直接插入排序
:经验gap=length/2;
#include<iostream>
#include<string>
using namespace std;
void ShellSort(int *pdata,int length)
{
int gap=length/2;
int key;
while(gap>=1)
{
for (int i=gap;i<length;i++)
{
key=pdata[i]; //保存后半段要插入的数据
int j=i-gap;
for (j;pdata[j]>key&&j>=0;j-=gap) //在前半段中,大的数据分别向后移动
{
pdata[j+gap]=pdata[j]; //没间隔gap为一组
}
pdata[j+gap]=key; //插入key
cout<<"the "<<i<<"round:"<<endl;
for(int i=0;i<length;i++)
cout<<pdata[i];
cout<<endl;
}
gap=gap/2;
}
}
int main()
{
int data[]={6,5,4,3,2,1};
int data2[]={1,2,3,4,5,6};
int data3[]={9,8,7,6,5,4,3,2,1};
cout<<"----------------------------------"<<endl;
ShellSort(data3,9);
return 0;
}
理解倒不难,程序编起来感觉有点困难。