我有以下快速排序代码。 虽然数组在函数split和quicksort中都是通过引用传递的,但我无法理解为什么更改后的数组没有显示在result中。在一些书中,我看到quicksort原型是在main函数中定义的。但这也行不通。 还告诉它是否允许在main中定义另一个函数的原型。
#include <iostream>
void quicksort(int *,int,int);
int split(int *,int,int);
using namespace std;
int main()
{
cout<<"\n Enter the 10 elements : ";
int n=10;
int a[10];
for(int i=0;i<10;i++)
{
cin>>a[i];
}
quicksort(a,0,9);
cout<<"\nThe sorted array is: ";
for(int c=0;c<10;c++)
{
cout<<a[c]<<" ";
}
return 0;
}
void quicksort(int arr[],int lower,int upper)
{
int i;
if(upper<lower)
{
i=split(arr,lower,upper);
quicksort(arr,lower,i-1);
quicksort(arr,i+1,upper);
}
}
int split(int arr[],int lower, int upper)
{
int i,a,b,temp;
a=lower+1;
b=upper;
i=arr[lower];
while(b>=a)
{
while(arr[a]<i)
a++;
while(arr[b]>i)
b++;
if(b>a)
{
temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
}
temp=arr[lower];
arr[lower]=arr[b];
arr[b]=temp;
return b;
}
答案 0 :(得分:4)
这是错误:
if(upper<lower)
由于upper
最初大于lower
,quicksort
函数会立即终止。比较应该是另一种方式。 (除非程序在我尝试时会出现段错误,但这是一个不同的问题。)
答案 1 :(得分:1)
另一个错误:
while(arr[b]>i)
b++;
应该是
while(arr[b]>i)
b--;
还有一个错误:
while(arr[a]<i)
a++;
应该是:
while(arr[a]<=i)
a++;
判决:错误的算法实现