虽然通过引用传递,但C ++数组没有改变

时间:2014-02-03 15:52:32

标签: c++

我有以下快速排序代码。 虽然数组在函数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;
}

2 个答案:

答案 0 :(得分:4)

这是错误:

if(upper<lower)

由于upper最初大于lowerquicksort函数会立即终止。比较应该是另一种方式。 (除非程序在我尝试时会出现段错误,但这是一个不同的问题。)

答案 1 :(得分:1)

另一个错误:

    while(arr[b]>i)
        b++;

应该是

    while(arr[b]>i)
        b--;

还有一个错误:

  while(arr[a]<i)
    a++;

应该是:

  while(arr[a]<=i)
    a++;

判决:错误的算法实现