<;向量>;把我的快速排序搞砸了 我必须在C++中实现快速排序。我想在我的快速排序算法中使用std::vector,因为我将从文本文件中读取大量数字,动态调整大小将非常有用。然而,当我试图用向量而不是数组实现快速排序时,它没有起作用,我无法解释原因

<;向量>;把我的快速排序搞砸了 我必须在C++中实现快速排序。我想在我的快速排序算法中使用std::vector,因为我将从文本文件中读取大量数字,动态调整大小将非常有用。然而,当我试图用向量而不是数组实现快速排序时,它没有起作用,我无法解释原因,c++,vector,quicksort,C++,Vector,Quicksort,另外,当我使用vector实现时,我的一个函数停止向控制台打印。我用数组尝试了这段代码,效果很好,但我更喜欢使用向量 代码如下:(注意,这只是算法本身,而不是任何文本文件内容) #包括 #包括 使用名称空间std; 无效快速排序(向量、整数、整数); int拆分向量(向量,int,int); 无效掉期(int&,int&); void main(){ 向量myVector; 插入(myVector.end(),2); 插入(myVector.end(),6); 插入(myVector.end()

另外,当我使用vector实现时,我的一个函数停止向控制台打印。我用数组尝试了这段代码,效果很好,但我更喜欢使用向量

代码如下:(注意,这只是算法本身,而不是任何文本文件内容)

#包括
#包括
使用名称空间std;
无效快速排序(向量、整数、整数);
int拆分向量(向量,int,int);
无效掉期(int&,int&);
void main(){
向量myVector;
插入(myVector.end(),2);
插入(myVector.end(),6);
插入(myVector.end(),5);
插入(myVector.end(),9);
插入(myVector.end(),3);
快速排序(myVector,0,myVector.size()-1);
对于(vector::iterator it=myVector.begin();it!=myVector.end();it++)

cout您的意思是通过引用而不是通过值传递向量,以便可以更改原始值:
vector&list
而不是
vector list


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

您的意思是通过引用而不是通过值传递向量,以便可以更改原始值:
vector&list
而不是
vector list


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

只是一个注释:您确实知道myVector的存在,对吗?
myVector.push_back(2)
是处理
myVector.insert(myVector.end(),2)的常规方法
。就这么说。@Streppel不。我想这很重要?@VioletGiraffe啊,我明白了。我会记住这一点。@Radix:这对这个问题不重要,但对于编程来说,了解标准库以及如何最好地使用它们是很重要的。只是一句评论:你确实知道myVector的存在,对吗?
myVector.push_back(2)
是处理myVector.insert(myVector.end(),2)的常规方法
。就这么说。@Streppel不。我想这很重要?@VioletGiraffe啊,我明白了。我会记住这一点。@Radix:这对这个问题不重要,但对于编程来说,了解标准库以及如何最好地使用它们是很重要的。就是这样。我假设向量会像arr一样自动通过引用传递但是我想我应该做我的研究。谢谢!!基诺:如果数组是通过引用传递的,那是不正确的。因为C++数组在技术上是指向某个内存位置的指针,即使你不能修改指针本身(也就是说指向哪个位置),你也可以修改那个位置。。如果它是通过引用传递的,您将能够修改指针本身。@VioletGiraff您当然是对的。我想我是在引用通过引用传递的函数含义,而不是实际的内存方面。就是这样。我假设向量会像数组一样自动通过引用传递,但我想我应该LD已经完成了我的研究。谢谢!@基诺:如果数组是通过引用传递的,那是不正确的。因为C++数组在技术上是指向某个内存位置的指针,即使你不能修改指针本身(也就是说指向哪个位置),你也可以修改那个位置。。如果它是通过引用传递的,您将能够修改指针本身。@VioletGiraffe您当然是对的。我想我是在引用通过引用传递的函数含义,而不是实际的内存方面。
#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;

}