線性時間選擇 第k個數

2022-09-11 08:09:08 字數 608 閱讀 5224

採用的演算法思想和快速排序十分相似,選取基準進行一次快排,得到乙個基準和左側小於基準右側大於基準的陣列。然後判斷基準的位置,如果第k個數在左邊便接著向左遞迴,如果在右側便接著向右側遞迴。

#include#include#include#include#include#include#includeusing namespace std;

//進行分割排序,並且返回排序後基準的位置

template int partition(type a,int p,int r)

//這裡j指向的要小於等於x

a[p]=a[j];

a[j]=x;

return j;

}//進行隨機分割,避免陣列整體倒序造成時間複雜度公升高

template int randomizedpartition(type a,int p,int r)

/* 線性時間選擇第k個數:

a :陣列

p :陣列起點

r :陣列終點

k :第k個數

*/template type randomizedselect(type a,int p,int r,int k)

線性選擇 求n個數中第k小數

include include include template int partition type a,int p,int r a p a j a j x return j template int randamizedpartition type a,int p,int r template ...

快速選擇第k個數

給定乙個長度為n的整數數列,以及乙個整數k,請用快速選擇演算法求出數列從小到大排序後的第k個數。輸入格式 第一行包含兩個整數 n 和 k。第二行包含 n 個整數 所有整數均在1 109範圍內 表示整數數列。輸出格式 輸出乙個整數,表示數列的第k小數。資料範圍 1 n 100000,1 k n 輸入樣...

分治法 線性時間選擇(求第k小數)

給定線性序集中n個元素和乙個整數k,1 k n,要求找出這n個元素中第k小的元素,這裡給定的線性集是無序的 線性時間選擇隨機劃分法可以模仿隨機化快速排序演算法設計。基本思想是對輸入陣列進行遞迴劃分,與快速排序不同的是,它只對劃分出的子陣列之一進行遞迴處理。利用隨機函式產生劃分基準,將陣列a p r ...