N個數中找出第k個最大的數 選擇問題

2021-08-29 20:33:53 字數 518 閱讀 7064

設有一組n個數而要確定其中第k個最大者,稱之為選擇問題。

解法一:將n個數鍍金乙個陣列中,再通過某種簡單的演算法,比如氣泡排序法,以遞減順序將陣列排序,然後返回位置k上的元素。執行時間為o(n^2)。

解法二:先把前k個元素讀入陣列並(以遞減的順序)對其排序,接著,將剩下的元素在逐個讀入。當新元素被讀到時,如果他小於陣列中的第k個元素則忽略,否則就將其放到陣列中正確的位置上,同時將陣列中的乙個元素基礎陣列。當演算法終止時,位於第k個位置上的元素作為答案返回。執行時間為o(n^2)。

解法三:(假設我們只考慮找出第k個最小的元素)將n個元素讀入乙個陣列,然後對該陣列應用buildheap演算法。最後,執行k次deletemin操作。從該堆最後提取的元素就是我們的答案。執行時間為o(nlogn)。

解法四:在任一時刻我們都將維持k個最大元素的集合s。在前k個元素讀入以後,當再讀入乙個新的元素時,該元素將與第k個元素進行比較,記著第k個最大的元素為sk。如果新的元素更大,那麼用新元素代替s中的sk。此時,s將有乙個新的最小元素,它可能是新新增進的元素,也可能不是。

N個數中找出最大的K個數

題目描述 有很多個 n個 無序的數,我們姑且假定它們各不相等,怎麼選出其中最大的若干個 k個 數呢?1.n 100,k 10的時候怎麼處理?2.n 1000,k 100呢?3.n 1億億個,k 100呢?如果這些數是整數的話,怎麼處理?如果是浮點數呢?如果這些數是整數,並且存在上界呢?如果將題目中的...

堆排序 在n個數中找出K個最大的數

主要思想 在n個數中找k個最大 小 的數,肯定要用到最小堆 最大堆的思想,而這種思想在c中stl中的優先佇列 priority queue 中體現比較明顯,優先佇列底層實現就是運用了最大堆 最小堆原理,如果要求用c實現的話,可以直接用。如果用c語言實現的話,就需要自己定於堆的一系列操作,自己實現最大...

N個數裡面找出最大的k個數

出處 題目 給出n個無序的數,然後找出其中最大的k個數 解題思路 首先測試資料有可能會有一億個數,資料量特別的大,資料庫不可能儲存這麼多的資料。如果直接sort排序,nlogn時間複雜度實在是太高,大於10 9。我們可以考慮對資料進行分塊讀取,每次讀取的資料塊大小應大於k。不如先假設第一次讀取的資料...