gpt4 book ai didi

java - 选择算法有时会返回错误的结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:49:47 26 4
gpt4 key购买 nike

对于家庭作业问题,我需要编写一个 Java 方法来查找数组中第 k 个最小的数字,使用快速排序式分区。我得到了 partition() 方法,我应该编写该方法来获取第 k 个最小的数字。

问题要求枢轴始终是数组范围中最右边的元素。

我得到了以下内容:

public int partition(int left, int right, long pivot) {
int leftPtr = left - 1;
int rightPtr = right + 1;
while (true) {
while (leftPtr < right && array[++leftPtr] < pivot);
while (rightPtr > left && array[--rightPtr] > pivot);

if (leftPtr >= rightPtr)
break;
else
swap(leftPtr, rightPtr);
}
return leftPtr;
}

我已经根据Wikipedia's pseudocode 编写了这个方法:

public int kthSmallest(int left, int right, int k){
if(left >= right){
return array[left];
}

int pivotNewIndex = partition(left, right, array[right]);

int pivotDist = pivotNewIndex - left - 1;

if(pivotDist == k){
return array[pivotNewIndex];
} else if(k < pivotNewIndex){
return kthSmallest(k, left, pivotNewIndex - 1);
} else{
return kthSmallest(k - pivotDist, pivotNewIndex + 1, right);
}
}

但是当我用随机生成的整数数组调用 kthSmallest() 时,大约一半的时间它会返回错误的值。例如:

array: [45, 60, 24, 82, 87, 79, 16, 32, 59, 83, 20, 2, 1, 
50, 11, 79, 72, 32, 0, 48, 69, 74, 22, 6, 96]
expected result when k=4: 11
actual result when k=4: 87

我做错了什么?

最佳答案

您的递归调用的参数列表顺序错误。您正在查看的子数组中的位置应该是第三个参数,而不是第一个。

关于java - 选择算法有时会返回错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10526908/

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