希尔排序
希尔排序
希尔排序的基本思想:选择d值,将想x[i]和x[i+d]比较大小,若逆序,反转,下次,d值减小,知道d==1做完为止.
#include<iostream>
using namespace std;
int map[50];
int n;
void swap(int a,int b)
{
int temp=map[a];
map[a]=map[b];
map[b]=temp;
}
void shell(int x)
{
if(x==0)return;
int i;
for(i=0;i<n;i++)
{
if(i+x<n&&map[i]>map[i+x]){
swap(i,i+x);
if((i+1)%x==0)
i=i+x;
}
}
shell(x-1);
}
int main()
{
int i;
while(cin>>n&&n)
{
for(i=0;i<n;i++)
cin>>map[i];
shell((n+1)/2);
for(i=0;i<n;i++)
cout<<map[i]<<' ';
cout<<endl;
}
return 1;
}