问题:希尔排序又叫缩小增量排序。增量的选取为d=length/2;d=d/2...d=1;
代码:
#include <iostream>
using namespace std;
void shellSort(int arr[],int length)
{
int d;
int temp;
int j,k;
static int count=1;
for(d=length/2;d>=1;d=d/2)
{
for(j=d;j<length;j++)
{
for(k=j-d;k>=0;k=k-d)
{
if(arr[k]>arr[k+d])
{
temp=arr[k+d];
arr[k+d]=arr[k];
arr[k]=temp;
}
}
}
cout<<"第"<<count<<"趟希尔排序:";
for(int i=0;i<length;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
}
void display(int arr[],int length)
{
int i;
for(i=0;i<length;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
int main()
{
int array[]={7,2,34,8,7,68,1,30,21,6};
cout<<"希尔排序前:"<<endl;
display(array,10);
shellSort(array,10);
cout<<"希尔排序后:"<<endl;
display(array,10);
return 0;
}
运行结果: