線性時間選擇

2021-08-17 23:40:51 字數 697 閱讀 6866

參考演算法設計與分析。

#include 

using

namespace

std;

inline

int random(int x,int y)

int partition(int a,int p,int r,int k)

return j;

//返回i跟返回j是一樣的。

}int select(int a,int p,int r,int k)

//(r-p-4)相當於n-5;

//將元素5個分為一組,分別排序,並將該陣列的中位數與a[p+i]交換位置

//將所有中位數都排在陣列最左側,以便進一步查詢中位數的中位數.

for(int i=0;i<=(r-p-4)/5;i++)

int x=select(a,p,p+(r-p-4)/5,(r-p-4)/10);//找中位數的中位數。

int i=partition(a,p,r,x);//找尋中位數的位置;

int j=i-p+1; //記得這塊得改變k在陣列中的位置。

if(i>k)

select(a,p,i,k);

else

select(a,i+1,r,k-j);//記得這塊得改變k在陣列中的位置

}int main()

線性時間選擇

今天學習了線性時間選擇,主要是通過快排的方法,在乙個平均時間線性的情況下進行第k小元素的選擇,結合一道題目進行描述 題目來自演算法設計與分析就是王曉東的那本 output.txt 這題目分析一下可以得出就是尋找中位數 為什麼呢?將這些數字排列在數軸上尋找乙個到各個點距離最小的那個點,可以得知最中間的...

線性時間選擇

出自 http algorithm.chaoskey.com 02 07 題目 給定線性序集中n個元素和乙個整數k,1 k n,要求找出這n個元素中第k小的元素,這裡給定的線性集是無序的 具體解題 這裡我們將所有的數 n個 以每5個劃分為一組,共 n 5 組 將不足五個的那組忽略 然後用任意一種排序...

線性時間選擇

這相當於是對於快速排序的基準選擇的乙個優化,使得選擇演算法達到線性時間。include include include includevoid swap int a,int b int compare const void a,const void b int partition int a,int...