減治演算法之尋找第K小元素問題

2022-07-29 20:51:13 字數 905 閱讀 2457

一、問題描寫敘述

給定乙個整數數列,尋找其按遞增排序後的第k個位置上的元素。

二、問題分析

借助類似快排思想實現pation函式。再利用遞迴思想尋找k位置。

三、演算法**

public static int selectmink(int  arr, int low, int high, int k)

if(index < k)else }

public static int pation(int arr, int low, int high)

if(low < high)

while(low < high && arr[low] <= arr[high])

if(low < high)

} return low;//返回low。high相遇位置

}

四、完整測試**

public class solution ;

int result = selectmink(randarr, 0, randarr.length - 1, 4);

system.out.print(result);

} public static int selectmink(int arr, int low, int high, int k)

if(index < k)else }

public static int pation(int arr, int low, int high)

if(low < high)

while(low < high && arr[low] <= arr[high])

if(low < high)

} return low;

}}

五、執行結果

第4小元素為:6

主元素問題 減治法

乙個有n個元素的序列a中,出現次數大於n 2的元素稱為主元素。現給定乙個序列 保證存在主元素 求其主元素 以下假設a的主元素存在,且出現了k次,則其他元素出現的次數為n k,二者的差記為c 2k n。可知x為主元素當且僅當 c 0。1.若 x 確實為a的主元素,則a剪去字首p後得到的字尾s,x的個數...

分治法尋找第k小元素演算法的優化

分治法尋找第k小元素演算法的優化 目的和意義 利用分治演算法尋找第k小元素並不是適用於所有情況,在處理一些問題時,按照傳統的分治的演算法似乎並不合理,舉個例子,在尋找一萬個元素中的第十小元素時利用傳統的尋找第k小元素的演算法會產生大量的冗餘,這時候利用每組的中位數並不合算,找中位數代價極大,然而效益...

選擇問題 第k小元素

問題描述 在乙個無序的序列t中,尋找第k小的元素 分析 將序列t進行公升序排列,下標為k的元素即為第k小的數。下標從1開始 考慮到快速排序的過程,每次進行一次partition 函式,就將比軸線值小的數放在軸線左邊,比軸線大的值放在軸線右邊,即可確定乙個軸線值的下標位置s。下面分三種情況 1 s k...