簡體   English   中英

第K個最小元素算法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM