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--;
}
}