当前位置:编程学习 > C/C++ >>

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 文件但里面什么都没有呢?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,