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;
}
答
您是按值而不是按引用传递,所以quickSort
正在A的副本和排序那。相反,尝试通过引用传递的载体:
int partition(vector<int>& A,int low,int high)
...和
void quickSort(vector<int>& A,int low,int high)
答
因为你通过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
+1为完整的示例程序。 – 2012-04-25 18:01:11
@Robᵩ谢谢你! – Ali 2012-04-25 18:03:38