尋找陣列中的第K大元素

2021-10-10 15:04:05 字數 863 閱讀 4322

一、簡述

使用資料結構堆,實現查詢陣列中的第k大元素。流程如下:陣列內容堆化(因為是查詢第k大,所以使用大根堆)、依次取出並刪除堆的根節點、將剩餘元素堆化、取到第k個即為目標元素。

二、**實現

#include

#include

using

namespace std;

intfindkth

(vector<

int> a,

int n,

int k)

if(rootelement >= aa[child]

)else

} aa[child /2]

= rootelement;

}int result =0;

for(

int i =

0; i < k; i++)if

(lastelement >= aa[childnode]

)else

} aa[curnode]

= lastelement;

}return result;

}int

main()

;int result =

findkth

(primes,

(int

)primes.

size()

,8);

cout <<

"result = "

<< result << endl;

return0;

}

三、執行結果

result =

34

快速尋找第k大元素

我們先思考排序為什麼可以解決該問題 如果我們隨便選定乙個元素,假想的認為它就是我們要找的第k大元素,我們最終要考察,證明的是這個元素在序列降序排序後到底應該處於哪個位置,如果是在第k位,那自然就是第k大元素。說到這裡似乎漏出了點端倪,是啊,我們這樣證明的話並不需要將序列完整的排序,我們只需要將比這個...

陣列中的第K大元素

第k大元素o n 解法,利用快排 剪枝,直接看 吧 include int k 7 第k大,k 0 int sort int array,int low,int high array low key return low void quicksort int array,int low,int hi...

215 陣列中的第K大元素

在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。示例 1 輸入 3,2,1,5,6,4 和 k 2 輸出 5 示例 2 輸入 3,2,3,1,2,4,5,5,6 和 k 4 輸出 4 說明 你可以假設 k 總是有效的,且 1...