主题:[讨论]看看这个快速排序算法错在哪里?
该排序算法有时会出错,我测试时用的随机产生数组,有时会出错
用的是Dev-C++
[code=c]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
void kuaisu(int *a,int n);
void quick(int *a,int left,int right);
int main()
{
int arr[N],i;
srand(time(NULL));
for(i=0;i<N;i++)
{
arr[i]=rand()/1000+100;
}
kuaisu(arr,N);
for(i=0;i<N;i++)
{
printf("%d ",arr[i]);
}
getch();
return 0;
}
void kuaisu(int *a,int n) //快速排序
{
quick(a,0,n-1);
}
void quick(int *a,int left,int right)
{
int f,l,r,t;
l=left;
r=right;
f=a[(left+right)/2];
while(l<r)
{
while(a[l]<f) ++l;
while(a[r]>f) --r;
if(l<=r)
{
t=a[l];
a[l]=a[r];
a[r]=t;
++l;
--r;
}
}
if(l==r)
{
l++;
}
if(left<r)
{
quick(a,left,l-1);
}
if(l<right)
{
quick(a,r+1,right);
}
}
[/code]
用的是Dev-C++
[code=c]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
void kuaisu(int *a,int n);
void quick(int *a,int left,int right);
int main()
{
int arr[N],i;
srand(time(NULL));
for(i=0;i<N;i++)
{
arr[i]=rand()/1000+100;
}
kuaisu(arr,N);
for(i=0;i<N;i++)
{
printf("%d ",arr[i]);
}
getch();
return 0;
}
void kuaisu(int *a,int n) //快速排序
{
quick(a,0,n-1);
}
void quick(int *a,int left,int right)
{
int f,l,r,t;
l=left;
r=right;
f=a[(left+right)/2];
while(l<r)
{
while(a[l]<f) ++l;
while(a[r]>f) --r;
if(l<=r)
{
t=a[l];
a[l]=a[r];
a[r]=t;
++l;
--r;
}
}
if(l==r)
{
l++;
}
if(left<r)
{
quick(a,left,l-1);
}
if(l<right)
{
quick(a,r+1,right);
}
}
[/code]