一、問題描寫敘述
給定乙個整數數列,尋找其按遞增排序後的第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...