找出N個資料中的最大的K個資料 堆排序

2021-07-12 00:27:43 字數 390 閱讀 9633

從n個資料中找出最大的k個資料,而且這裡有乙個限制:記憶體裡存不下所有的n個資料,但是可以存下k個資料。這就讓我們打消了用排序的方法來解的念頭。

在這裡我們使用堆排序來完成。

因為我們只能有k個資料那麼大的空間,所以我們建乙個k大的堆,將n的前k個資料插入到堆中,然後調整堆。(對於堆結構不了解的可以檢視我微博  

對於最大的k個資料,我們要怎麼找出來呢。我們首先要確定我們是要用大頂堆還是小頂堆。

堆排序的時間效率是nlogn,算是效率比較高的演算法了,值得我們去掌握的。

本文出自 「稻草陽光」 部落格,請務必保留此出處

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

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

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

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

100w個數中找出最大的k個數

1.思路1 我們應該首先想到是先將100w個數排序,暫且不考慮效率問題,可是記憶體中能放得下嗎?2.思路2 堆排序,先從中去k個數進行堆排,然後乙個乙個數進行比較替換,每替換一次都得將堆下調一次,去保證堆得特性 函式findmaxknum 倆件事 一 取k個數進行建堆 二 進行資料替換,替換完一次下...