[英]Kth smallest element algorithm
我正在編寫一種算法,該算法可以對未排序的整數數組進行分而治之,以找到第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,2,3,20,4,5,6
並搜索第6個元素會出錯。 這是因為在這種情況下,您將不得不多次交換一個元素,而在我看來,您永遠不會那樣做。 您將交換20和6,但是之后您將增加i,因此在您本應實際使用時再也不會交換6。 6是正確答案。 我不確定您會找到什么價值,但不會是6。
同樣,由於元素等於樞軸,可能會發生一些問題。 嘗試為此類元素添加特殊檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.