求乙個容器中第k大元素

2021-10-06 06:21:15 字數 708 閱讀 2832

相信各位小夥伴們都遇見過求第k大元素問題,我們首選就是將這個容器內元素進行個排序,但是我們有的情況下這個容器不能隨便動,我們只需要返回第k大的元素就行,我們怎麼辦呢?

我們當然是選擇乙個個比較,從第一大一直找到第k大,這種情況一般會在樹結構和圖結構中常見,我們來看乙個簡單的**,尋找第一大和第二大的元素。

我們注意要將這個temp的宣告週期延長,不能宣告成區域性變數,全域性更好點。

int temp;

intmain()

;int sz =

sizeof

(arr)

/sizeof

(arr[0]

);int max = arr[0]

;int max1 =

-100;if

(sz ==1)

max = max1 = arr[0]

;for

(int i =

0; i < sz;

++i)

}for

(int j =

0; j < sz;

++j)

cout <<

"max = "

<< max <<

"max1 = "

<< max1 << endl;

system

("pause");

return0;

}

求第 K 大元素

問題 給定乙個長度為 n 的陣列,求第 k 大元素。普通的 o n 隨機分治應該廣為人知,這裡介紹一種確定性的 o n 做法。我們考慮分治,每五個元素一組,我們 o 1 求出每組五個元素的中位數,隨後我們遞迴呼叫該做法,求出每一組中位數的中位數,記為 x 然後我們 o n 掃瞄求出 x 的排名,我們...

Partition演算法 求第K大元素

二分partition演算法是指在o n 的時間複雜度和o 1 的空間複雜度的情況下將乙個陣列分為大於某個數和小於某個數的兩部分。快速排序其實就是分治 partition演算法。int partition vector int nums,int begin,int end swap nums pos...

N個元素陣列中第K大元素

k key.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std template int pivotindex t arr,int first,int last arr first arr last while...