C++ 随机快速排序

C++ 随机快速排序,c++,algorithm,C++,Algorithm,此代码不显示任何输出 #include <cstdlib> #include <iostream> using namespace std; int partition(int a[], int left, int right) { int i = left; int j = right; int temp; int pivot = a[left]; while(i <= j) { while(a[i]

此代码不显示任何输出

#include <cstdlib>
#include <iostream>
using namespace std;

int partition(int a[], int left, int right) {
    int i = left;
    int j = right;

    int temp;
    int pivot = a[left];

    while(i <= j) {
        while(a[i] < pivot)
             i++;

        while(a[j] > pivot)
            j--;
            if(i>j) break;

            if (i<j){
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
                i++;
                j--;
            }
    }
    return i;
}

int randomized_partition(int a[], int left, int right){
    int t = left + rand() % (right - left + 1);

    std::swap(a[right], a[t]);
    return partition(a, left, right);
}

void randomized_quicksort(int a[], int l, int r){
    if(l> = r) return;

    int q = randomized_partition(a, l, r);
    randomized_quicksort(a, l, q-1);
    randomized_quicksort(a, q+1, r);
}

int main(){
    int a[] = {12, 6, 4, 7, 9, 10, 11, 14, 13, 19, 18, 21, 20};
    int n = sizeof(a) / sizeof(n);
    randomized_quicksort(a, 0, n-1);

    for (int i = 0; i < n; i++){
        cout << a[i] << "  " << endl;
    }
    return 0;
}
#包括
#包括
使用名称空间std;
int分区(int a[],int左,int右){
int i=左;
int j=右;
内部温度;
int pivot=a[左];
而(我)
j--;
如果(i>j)断裂;
如果(i=r)返回;
int q=随机化分区(a,l,r);
随机快速排序(a、l、q-1);
随机快速排序(a,q+1,r);
}
int main(){
INTA[]={12,6,4,7,9,10,11,14,13,19,18,21,20};
int n=大小(a)/大小(n);
随机快速排序(a,0,n-1);
对于(int i=0;i难道运行该程序时控制台窗口会立即打开和关闭吗?将其放在
main
function:
system(“pause”)

int pivot=a[左];
当(ij)中断时;

如果(i程序在调用
分区(2,4)
时卡住了。此时数组的相关部分是
6,9,7
,因此
pivot
初始化为
6

您在
循环时输入主
,而
i
循环会立即终止,因为
a[i]==pivot
。因此进入
j
循环,该循环执行两次,因为
7
9
都大于
pivot
,后者仍然是
6
j
循环在
j==2时终止,因为
a[j]==pivot

向前看,第一个条件是
false
,因为
i
不大于
j
。第二个条件是
false
,因为
i
不小于
j
。这标志着主
while
循环的结束,所以我们检查循环的条件,发现它是
true
be原因
i
等于
j
。我们没有更改任何数组元素的值,因此内部
while
循环不再运行,条件保持为
false
。您陷入了无限循环中,从未取得任何进展


仔细看看你的教科书。要么书中有错误,要么你在抄写时出错。

你听说过“调试器”吗?你的格式/缩进有什么问题吗?读这本书很痛苦。如果它根本没有显示输出,那么[i]出现空白或循环没有运行。您可能希望打印n的值以确保它不会出现零-看起来不应该出现,但这是我想到的唯一一件事。它实际上出现了n个空白行吗?确切地说,什么是“无输出”?@Adam,代码不会产生任何输出,因为它从未完成运行。我已经清理了代码混乱…下次,请花30秒的时间缩进代码,并且请使用更多的空格(!)围绕着操作符等。如果我的调试器曾经这样对我说话,我会哭。在你调试完之后,关闭是不公平的。如果问题不好,答案是不公平的。投票重新打开。特别是因为它是因为无效的原因关闭的(很清楚问了什么)
int pivot=a[left];
while(i<=j){
    while(a[i]<pivot)
         i++;
    while( a[j]>pivot)
        j--;
    if(i>j) break;
    if (i<j){
        temp=a[i];
        a[i]=a[j];
        a[j]=temp;

        i++;
        j--;

    }
}