<vector>弄乱了我的Quicksort </vector>

时间:2014-02-26 18:25:38

标签: c++ vector quicksort

我必须在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中测试了函数本身,它似乎交换了向量中的元素。我对矢量很新,所以任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:4)

您的意思是通过引用而不是值传递矢量,以便原始版本可以更改:vector<double>& list而不是vector<double> list

另外,我强烈建议不要使用像list这样的标准容器名作为参数名称。