我正在编写一种算法,它可以对未排序的整数数组进行除法和求解,以找到第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];
如果有人发现此算法有任何问题,请告知我们。我已经调试好几个小时了。感谢。
答案 0 :(得分:1)
输入1,2,3,20,4,5,6
和搜索第6个元素会出错。那是因为在这种情况下你将不得不多次交换一个元素,在我看来你永远不会这样做。你将交换20和6,但之后你将增加i,因此在你真正应该的时候再也不会交换6。 6是正确的答案。我不确定你会找到什么价值,但它不会是6。
由于与枢轴相等的元素,也可能会出现几个问题。尝试为这些元素添加特殊检查。