C++:变量不受影响的虚函数

问题描述:

我试图实现一个基本的快速排序算法,我想我已经正确实施它。但是这些函数根本不影响数组。可能是什么原因?我无法弄清楚什么是错了,所以我决定在这里进行磋商,以我的同胞程序员:C++:变量不受影响的虚函数

#include <iostream> 
#include <vector> 

using namespace std; 

int partition(vector<int> A,int low,int high) 
{ 
    int pivot=A[high-1]; 
    int boundryForLowerArray=low-1; 
    for(int i=low;i<high-2;i++) 
    { 
     if(A[i]<=pivot) 
     { 
      boundryForLowerArray++; 
      swap(A[i],A[boundryForLowerArray]); 
     } 
    } 
    swap(pivot,A[boundryForLowerArray+1]); 
    return boundryForLowerArray+1; 
} 
void quickSort(vector<int>A,int low,int high) 
{ 
    if(low<high) 
    { 
     int q=partition(A,low,high); 
     quickSort(A, low, q-1); 
     quickSort(A, q+1, high); 
    } 
} 


int main(int argc, const char * argv[]) 
{ 

    vector<int>A,sorted; 
    A.push_back(2); 
    A.push_back(8); 
    A.push_back(7); 
    A.push_back(1); 
    A.push_back(3); 
    A.push_back(5); 
    A.push_back(6); 
    A.push_back(4); 
    quickSort(A, 0, A.size()); 
    for(int i=0;i<A.size();i++) 
     cout<<A[i]<<" "; 
    return 0; 
} 
+0

+1为完整的示例程序。 – 2012-04-25 18:01:11

+0

@Robᵩ谢谢你! – Ali 2012-04-25 18:03:38

您是按值而不是按引用传递,所以quickSort正在A的副本和排序那。相反,尝试通过引用传递的载体:

int partition(vector<int>& A,int low,int high) 

...和

void quickSort(vector<int>& A,int low,int high) 
+0

感谢您的回答。我怎么解决这个问题? – Ali 2012-04-25 17:58:47

+0

@rolandbishop只要改变他上面提到的两条线(即'矢量'到'矢量&'),它就像一个魅力。 – 2012-04-25 18:02:16

+0

我想它确实如此,但它让我意识到我写了一个快速排序算法,不排序大声笑。 – Ali 2012-04-25 18:03:18

因为你通过PARAMS按价值计算,而不是按引用。实际上,您应该有一个函数,其中包含数组的开始和结束的迭代器(vec.begin(),vec.end())作为参数。另外你的算法应该接受任何类型的迭代器。所以你应该使用模板!

template<class Iterator> 
void quick_sort(Iterator begin, Iterator end) { 
    for(auto iter = begin;iter != end;iter++) 
     *iter; // access to the value of the iterator