Java 第k最小元素算法

Java 第k最小元素算法,java,arrays,quicksort,Java,Arrays,Quicksort,我正在写一个算法,它对一个未排序的整数数组进行除法和征服,以找到第k个最小的元素。在测试我的程序时,我的几个输出出现了错误。代码如下: public class kthsmallest { public static final int MaxSize = 500; public static int find_kth_smallest( int[] A, int n, int k ) { return quicksort(A, n, k, 0, n-1); } pu

我正在写一个算法,它对一个未排序的整数数组进行除法和征服,以找到第k个最小的元素。在测试我的程序时,我的几个输出出现了错误。代码如下:

public class kthsmallest {

public static final int MaxSize = 500;

public static int find_kth_smallest( int[] A, int n, int k )
{
         return quicksort(A, n, k, 0, n-1);
}  

public static int quicksort(int[] A, int n, int k, int low, int high){
int i = low;
int j = high;
int position = low + (high-low)/2;
int pivot = A[position];

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

    while(A[j] > pivot)
        j--;

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

//
if (position + 1 > k){
    return quicksort(A, n, k, low, position-1);
} else if (position + 1 < k){
     return quicksort(A, n, k, position+1, high);
} else
    return A[position];
公共类kthsmallest{
公共静态最终整数最大值=500;
公共静态int find_kth_minimable(int[]A,int n,int k)
{
返回快速排序(A、n、k、0、n-1);
}  
公共静态int快速排序(int[]A、int-n、int-k、int-low、int-high){
int i=低;
int j=高;
int位置=低+(高-低)/2;
int pivot=A[位置];
而(我)
j--;
如果(i k){
返回快速排序(A、n、k、低位、位置-1);
}否则如果(位置+1

如果有人发现这个算法有什么问题,请告诉我。我已经调试了好几个小时了。谢谢。

输入
1,2,3,20,4,5,6
和搜索第6个元素时,你会出错。这是因为在这种情况下,你必须多次交换一个元素,而且在我看来你永远不会这样做。你将交换20个元素但在那之后,你将增加i,因此,当你真的应该交换6时,你将不再交换6。6是正确的答案。我不确定你会找到什么值,但它不会是6


由于元素与轴相等,也可能会出现一些问题。请尝试为此类元素添加特殊检查。

您将错误地输入
1,2,3,20,4,5,6
,并搜索第6个元素。这是因为在这种情况下,您必须多次交换元素,而在我看来,您永远不会这样做。您将交换第20页和第6页,但在此之后,你将增加i,因此,当你实际应该交换6时,你将不再交换6。6是正确的答案。我不确定你会找到什么值,但它不会是6


由于元素与轴相等,也可能会出现一些问题。请尝试为这些元素添加特殊检查。

是否可以发布生成错误解决方案的数据集?是否可以发布生成错误解决方案的数据集?