該問題是順序統計量中十分經典的問題。
使用快排中的分割槽法,將第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 重新調整為最大堆。接著,將...