gpt4 book ai didi

java - 快速排序降序不升序排序

转载 作者:行者123 更新时间:2023-12-04 05:41:39 26 4
gpt4 key购买 nike

我刚刚从书中实现了快速排序算法并得到了奇怪的输出。它可以工作,但它按降序而不是升序排序。例如:[1、5、2、10、6、9、8、3、7、4]
已排序 [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] 似乎无法在我的代码中找到源代码:

private void quicksort(int[] A, int p, int r) {
if (p < r) {
int q = partition(A, p, r);
quicksort(A, p, q);
quicksort(A, q + 1, r);
}
}

private int partition(int[] A, int p, int r) {
int x = A[p]; // pivot
int i = p;
int j = r;
while (true) {

while (A[i] > x) {
i++;
}

while (A[j] < x) {
j--;
}
if (i < j) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
} else {
return j;
}
}
}

初次通话:
   quicksort(A, 0, A.length - 1);

如何计算快速排序的空间复杂度?

感谢你们

最佳答案

它在您的分区函数中,您按降序排序。

 while(true) {
//ignore all the numbers greater than X to left
while (A[i] > x) {
i++;
}
//ignore all numbers lesser than X to right
while (A[j] < x) {
j--;
}

//swap a number lesser than X on left with a number greater than X on right
if (i < j) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
i++;
j--;
} else {
//Now the array is so sorted, that all numbers lesser than X are on right of it and greater than X are to left of it. Hence return position of X
return j;
}
}

//对于升序:
 while(true) {

while (A[i] < x) {
i++;
}

while (A[j] > x) {
j--;
}

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

关于java - 快速排序降序不升序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11196571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com