給定乙個長度為n的整數數列,以及乙個整數k,請用快速選擇演算法求出數列從小到大排序後的第k個數。
輸入格式
第一行包含兩個整數 n 和 k。
第二行包含 n 個整數(所有整數均在1~109範圍內),表示整數數列。
輸出格式
輸出乙個整數,表示數列的第k小數。
資料範圍
1≤n≤100000,
1≤k≤n
輸入樣例:
5 32 4 1 5 3
輸出樣例:
3整體思想:
利用快速排序的過程,快排過程中會把陣列分成兩部分,可以通過比較兩邊陣列的長度與k的關係來確定k在哪一邊,這樣只需要對一邊遞迴就行了。左邊長度是j-l+1,k在左邊的位置就是k,但是如果k在右邊部分,那麼他在右邊的相對位置就是k-(j-l+1)
int
quick_sort
(int q,
int l,
int r,
int k)
if(j - l +
1>= k)
return
quick_sort
(q, l, j, k)
;else
return
quick_sort
(q, j +
1, r, k -
(j - l +1)
);}
第K個數 快速排序
題目描述 description 給定乙個長度為n 0輸入描述 input description 第一行為2個數n,k 含義如上題 第二行為n個數,表示這個序列 輸出描述 output description 如果m為質數則 第一行為 yes 沒有引號 第二行為這個數m 否則 第一行為 no 第二...
線性時間選擇 第k個數
採用的演算法思想和快速排序十分相似,選取基準進行一次快排,得到乙個基準和左側小於基準右側大於基準的陣列。然後判斷基準的位置,如果第k個數在左邊便接著向左遞迴,如果在右側便接著向右側遞迴。include include include include include include includeus...
快速冪 序列的第k個數
時間限制 1 sec 記憶體限制 128 mb 提交 24 解決 5 提交 狀態 討論版 命題人 quanxing 給你乙個序列的前3項,要麼等差數列要麼等比序列,你能求出第k項的值嗎。如果過大對200907取模 輸入t 組測試資料 每組測試資料有abc k 輸出第k項 2 1 2 3 5 1 2 ...