Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';这个快速排序有什么问题,我是从书上查到的_C++_Quicksort - Fatal编程技术网

C++ 什么';这个快速排序有什么问题,我是从书上查到的

C++ 什么';这个快速排序有什么问题,我是从书上查到的,c++,quicksort,C++,Quicksort,我写了一个程序,包含对矢量中包含的一些数据进行快速排序 我引用了。--马克·艾伦·韦斯,但当我在VS2015&&G++4.8下执行它时,程序失败了 我唯一能确定的是,我计划的另一部分是正确的。 生成一些数据,并将它们读取到向量 (比较QuickSort和MergeSort之间的属性,而MergeSort在显示文本时运行良好) void快速排序(向量&a){ 快速排序(a,0,a.size()-1); } int median3(向量&a、int left、int right){ int mid=

我写了一个程序,包含对矢量中包含的一些数据进行快速排序

我引用了。--马克·艾伦·韦斯,但当我在VS2015&&G++4.8下执行它时,程序失败了

我唯一能确定的是,我计划的另一部分是正确的。 生成一些数据,并将它们读取到向量 (比较QuickSort和MergeSort之间的属性,而MergeSort在显示文本时运行良好)

void快速排序(向量&a){
快速排序(a,0,a.size()-1);
}
int median3(向量&a、int left、int right){
int mid=(左+右)>>1;
if(a[mid]//如果(左+10您需要确保
right
大于
left
,然后才能将其传递到
快速排序(a,左,右)
。否则,当您尝试访问
a[]
时,位置可能超出范围

此外,您不需要在
median3
中将轴交换到末端,然后在
QuickSort
中“还原”它。只需让
i
j
索引从向量的两端开始,然后将小于轴的数字与大于轴的数字交换

void QuickSort(vector<int> &a, int left, int right) {

    int pivot = a[(left + right) / 2];

    // begin partitioning
    int i = left, j = right;
    for ( ; ;) {
        while (a[i] < pivot){ ++i; }
        while (pivot < a[j]){ --j; }
        if (i < j){
            swap(a[i], a[j]);
        }
        else break;
    }

    if (left < i-1) QuickSort(a, left, i - 1);  // store small element
    if (i+1 < right) QuickSort(a, i + 1, right); // store large element
}
void快速排序(向量&a、左整数、右整数){
int pivot=a[(左+右)/2];
//开始分区
int i=左,j=右;
对于(;;){
而(a[i]
void QuickSort(vector&a){QuickSort(a,0,a.size()-1);}
?使用调试器时,哪个语句会导致问题?语句中的变量值是什么?
void QuickSort(vector<int> &a, int left, int right) {

    int pivot = a[(left + right) / 2];

    // begin partitioning
    int i = left, j = right;
    for ( ; ;) {
        while (a[i] < pivot){ ++i; }
        while (pivot < a[j]){ --j; }
        if (i < j){
            swap(a[i], a[j]);
        }
        else break;
    }

    if (left < i-1) QuickSort(a, left, i - 1);  // store small element
    if (i+1 < right) QuickSort(a, i + 1, right); // store large element
}