Kth最小元素算法

时间:2013-03-08 18:31:15

标签: 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);
}  

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

如果有人发现此算法有任何问题,请告知我们。我已经调试好几个小时了。感谢。

1 个答案:

答案 0 :(得分:1)

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

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