快速選擇第k個數

2021-10-21 21:29:41 字數 703 閱讀 2717

給定乙個長度為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 ...