我必须在C ++中实现quicksort。我想将std::vector
用于我的快速排序算法,因为我将从文本文件中读取大量数字,并且动态大小调整将非常有用。但是,当我尝试使用向量而不是数组来实现快速排序时,它不起作用,我无法解释原因。
另外,当我使用矢量实现时,我的一个函数停止了打印到控制台。我尝试使用数组的代码,它工作正常,但我真的更喜欢使用向量。
这是代码:(请注意,这只是算法本身,而不是任何文本文件的东西)
#include<iostream>
#include<vector>
using namespace std;
void QuickSort(vector<double>, int, int);
int splitVector(vector<double>, int, int);
void swap(int &, int &);
void main(){
vector<double> myVector;
myVector.insert(myVector.end(), 2);
myVector.insert(myVector.end(), 6);
myVector.insert(myVector.end(), 5);
myVector.insert(myVector.end(), 9);
myVector.insert(myVector.end(), 3);
QuickSort(myVector, 0, myVector.size()-1);
for(vector<double>::iterator it = myVector.begin(); it != myVector.end(); it++)
cout<<*it<<" ";
cout<<endl<<endl;
}
void QuickSort(vector<double> list, int low, int high){
if((high-low) > 1){
int splitIndex = splitVector(list, low, high);
QuickSort(list, low, splitIndex-1); //left subarray
QuickSort(list, splitIndex+1, high);
}
}
int splitVector(vector<double> list, int low, int high){
int left = low+1;
int right = high;
double pivot = list[low];
while(left <= right){
while(list[left] < pivot && left <= right){
left++;
}
while(list[right] > pivot && right >= left){
right--;
}
if((right - left) > 0){
swap(list[left], list[right]);
}
}
swap(list[low], list[left-1]);
return left-1; //resting place of the pivot
}
void swap(int &first, int &second){
cout<<"Swapping..."<<endl<<endl;
int temp = first;
first = second;
second = temp;
}
swap()
的“交换......”部分是不为我输出的部分,但是我在main中测试了函数本身,它似乎交换了向量中的元素。我对矢量很新,所以任何帮助都会非常感激。
答案 0 :(得分:4)
您的意思是通过引用而不是值传递矢量,以便原始版本可以更改:vector<double>& list
而不是vector<double> list
。
另外,我强烈建议不要使用像list
这样的标准容器名作为参数名称。