C++ 快速排序无法返回相同数组
Part方法并没有做任何事情,它输出的数组和输入的数组相同,我不知道出了什么问题C++ 快速排序无法返回相同数组,c++,array-algorithms,C++,Array Algorithms,Part方法并没有做任何事情,它输出的数组和输入的数组相同,我不知道出了什么问题 void part(int array[100], int start, int end){ int pivot = array[start]; int i = start; int j = end; int temp, temp2; // i to swap elements greater than pivot // j to swap elements less than or equ
void part(int array[100], int start, int end){
int pivot = array[start];
int i = start;
int j = end;
int temp, temp2;
// i to swap elements greater than pivot
// j to swap elements less than or equal to pivot
while(i > j){
while(true){
if(array[i] <= pivot ){
break;
}
++i;
}
while(array[j] > pivot){
if(array[j] > pivot){
break;
}
--j;
}
if(i < j){
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
if(j < i){ // j - i cross each other
temp2 = pivot;
pivot = array[j];
pivot = temp2;
}
for(int k = 0; k<end;++k){
cout<<array[k];
}
}
void quick(int array[100], int start, int end){
if(start < end){
part(array, start, end);
}
}
void部分(int数组[100],int开始,int结束){
int pivot=array[start];
int i=开始;
int j=结束;
内部温度,温度2;
//我需要交换大于枢轴的元素
//j交换小于或等于枢轴的图元
而(i>j){
while(true){
if(数组[i]轴){
if(数组[j]>pivot){
打破
}
--j;
}
if(i 对于(int k=0;k仅当
if(start < end){
part(array, start, end);
因此,预计这不会起任何作用。while
将永远不会进入。如何使用quick
和part
?请发布一条。请注意,while(i>j)循环的主体启动时以及使用调试器运行程序时,将不会执行,您看到了什么?这正是调试器的用途。如果您不知道如何使用调试器,这是一个很好的机会,可以学习如何使用调试器一次运行一行程序,监视所有变量及其值的变化,并分析YSE程序的逻辑执行流程。知道如何使用调试器是每个C++开发者所需的技能,没有例外。在调试器的帮助下,你应该能够快速找到你编写的所有程序中的所有bug,而不必向任何人求助。必须对数组进行排序,因此请注意,您的程序看起来很危险,因为循环中没有i
的限制while(true)
和array[i]
可能超出范围。while(array[j]>pivot)
如果end
在范围内,则循环是安全的,因为array[j]>pivot
(与循环条件相同!)我之前使用的是相同的版本,但我做了一些更改,哈哈
int i = start;
int j = end;
while(i > j){