亂序陣列中第k大的數(順序統計量)

2022-06-19 16:33:10 字數 456 閱讀 2982

該問題是順序統計量中十分經典的問題。

使用快排中的分割槽法,將第k大的數排序。若雙向掃瞄分割槽加上三點中值法或絕對中值法,可以保證在 o(n) 時間裡找出第k大的數。

補充:可以直接使用c++stl中的nth_element函式(一定注意使用形式!!!!)。

1/*2

* 第k大的數 3*/

4int part_(int arr, int p, intr)5

13swap(arr[b], arr[r]);

14return

r;15}16

intselect(int arr, int p, int r,int

k)1725}

26int

main()

27

求亂序陣列中第K大的值

投機取巧用函式進行處理,沒有從演算法角度思考 編譯成功60 還得再想想哪些案例沒有實現 include include include using namespace std int main 輸入為首行亂序數列,第二行為k值 int num vectorv1 while cin num int k...

3 6 最快效率求出亂序陣列中第k小的數

以盡量高的效率求乙個亂序陣列中第k小的元素 演算法1用快排先將陣列排序,然後直接找第k個元素,時間複雜度為o nlgn 演算法2思路用分割槽查詢的思想,同樣有點排序的感覺,畢竟分割槽就是將小於主元的元素放左邊,大於主元的元素放右邊。與排序完再查詢不同的是 對於一次遞迴呼叫來說 比如原來陣列10個元素...

從無序陣列中找出第K大的數

該題目的兩種實現方式,第一種是用堆排序 其中陣列用到了二叉樹的性質 第二種是利用快速排序來實現.最大堆進行公升序排序,主要步驟是 1.初始化堆 將數列a 1.n 構造成最大堆。2.交換資料 將a 1 和a n 交換,使a n 是a 1.n 中的最大值 然後將a 1.n 1 重新調整為最大堆。接著,將...