C语言快排求解啊
数据结构的快排,我发现这段代码貌似有点问题,好多测试数据是可以通过的,但是做ACM最简单的用冒泡排序都可以过,但是这块代码超时,请大神帮忙看看怎么回事,我检查不出错误啊
#include<stdio.h>
#define lmax 1000000
int a[lmax];
void quicksort(int a[],int t,int w)
{
int i=t,j=w;
int is=a[t];
if(t>=w)
return;
while(i<j)
{
while(i<j&&is<=a[j])
j--;
if(i<j)
{a[i]=a[j];i++;}
while(i<j&&is>=a[i])
i++;
if(i<j)
{
a[j]=a[i];
j--;
}
a[i]=is;
quicksort(a,t,i-1);
quicksort(a,i+1,w);
}
}
int main()
{
int n,i;
while(scanf("%d",&n)==1)
{
if(!n)
return 0;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
quicksort(a,1,n);
for(i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\n",a[i]);
}
return 0;
}
追问:对了,我刚刚也找出错误了,但是想问问为什么要把那句
a[i]=is;
quicksort(a,t,i-1);
quicksort(a,j+1,w);
放到外头?什么11?
答案:#include<stdio.h>
#define lmax 1000000
int a[lmax];
void quicksort(int a[],int t,int w)
{
if(t<w)
{
int i=t,j=w;
int is=a[t];
while(i<j)
{
while(i<j&&is<=a[j])
j--;
a[i]=a[j];
while(i<j&&is>=a[i])
i++;
a[j]=a[i];
}
a[i]=is;
quicksort(a,t,i-1);
quicksort(a,j+1,w);
}
}
int main()
{
int n,i;
while(scanf("%d",&n)==1)
{
if(!n)
return 0;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
quicksort(a,0,n-1);
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
return 0;
}
//看看是否符合题意?
上一个:C语言unsigned int纠错
下一个:c++ fstream 问题,为何我又生成Result_Csv.txt 文件但里面什么都没有呢?