我的快速排序代码,错在哪里?可以执行,但是出现两个非法数据。
发布网友
发布时间:2024-01-16 19:57
我来回答
共1个回答
热心网友
时间:2024-10-29 06:31
有一点小错误,已经改过了,而且改动的地方有注释,你自己看吧
#include <iostream>
using namespace std;
#define MAX 7
void qsort(int arr[],int l,int r);
int position(int arr[],int l,int r);
void swap(int *a, int *b)
{
int t=*a; *a=*b; *b=t;
}
void main()
{
int i;
int a[MAX]={13,14,94,33,82,25,59};
qsort(a,0,6);
for (i=0;i<MAX;i++)
{
cout<<a[i]<<"\t";
}
}
void qsort(int arr[],int l,int r)
{
int pos;
if (r-l>1)
{
pos = position(arr,l,r);
//加的if语句,防止第一个数是最小的
if(l!=pos)
qsort(arr,l,pos-1);
//加的if语句
if(pos+1<r)
qsort(arr,pos+1,r);
}
else
{
if (arr[l]<=arr[r])
return;
else
swap(arr[l],arr[r]);
}
}
int position(int arr[],int l,int r)
{
int i=l+1,j=r,pos=l;
while (i<j)
{
if (arr[i]<arr[pos])
i++;
else
swap(&arr[i],&arr[j--]);
// swap(&arr[i],&arr[r--]);这个r改为j
}
if (arr[i]>=arr[pos])
{
swap(arr[pos],arr[--i]);
}
else
swap(arr[pos],arr[i]);
return i;
}