C语言希尔排序的问题!本人新手,刚学希尔,写的有些冗长,但是上交校题库的时候,冒泡排序不超时,希尔超时了不知道哪里错了求大神解答!
#include<stdio.h>
void swap(int a[],int i,int j)
{
int t;
t=a[i];
a[i]=a[j];
a[j]=t;
}
void shellsort(int a[],int low,int high,int p)//p为那个选择的长度最后会变成1的那个
{
int i,n=0;
if(p==1)
{
for(i=low;i<high;i++)
if(a[i]>a[i+1])
{
n=1;
break;
}
if(n)
for(i=low;i<=high-p;i++)
{
if(a[i]>a[i+p])
swap(a,i,i+p);
}
return;
}
p/=2;
for(i=low;i<=high-p;i++)
{if(a[i]>a[i+p])
swap(a,i,i+p);
}
for(i=low;i<=high;i++)
shellsort(a,low,high,p);
return;
}
int main()
{
int i,j,a[20000],b,m,n;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
shellsort(a,0,n-1,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}
return 0;
}