線性時間選擇

2022-05-22 12:00:15 字數 571 閱讀 8258

一般解決的問題是求乙個n個數的列表中第k個最小的元素。這個數字被稱為第k個順序統計量。

//

對陣列元素data[lowhigh]進行分割槽操作,0號單元不用

int partion(int data,int low,int

high)

data[low]=data[0

];

return

low;}/*

查詢data[pr]中第k大的數.

**平均情況下,它比快速排序應該要快,因為分割槽之後只用處理乙個子陣列,而

**而快速排序要處理兩個獨立的子陣列。

**t(n)=t(n/2)+(n+1)

**t(n)=o(n)

*/int lineselect(int data,int p,int r,int

k)

else//s

}/*快速排序:

**t(n)=2t(n/2)+n

**t(n)=nlogn

*/void qsort(int *v,int low,int

high)

}

線性時間選擇

今天學習了線性時間選擇,主要是通過快排的方法,在乙個平均時間線性的情況下進行第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...