《程式設計之美》2 5尋找最大的K個數

2021-05-12 20:48:12 字數 552 閱讀 7556

問題:有很多個無序的數(假設為n個),怎麼選出其中最大的k個數?

kay's word:

kay的理解:「很多」 == 好多好多,無法儲存,因此首先排除了對輸入數排序的解法,而採用小容量陣列整理大的輸入資料,即:開大小為k的陣列,通過遍歷n個輸入陣列,每遍歷乙個數num,檢查k陣列的最小數,如果比num小,則用num替換。最終完成k個最大數的提取。

**如下:

insertret函式**部分,使用的是:

第一次遍歷k陣列,檢查是否有與待插入的curnum數值相同的數,去重,如果有相同的,直接退出比較;

第二次遍歷k陣列,找最小數,如果curnum大於最小數,則用curnum代替最小數。

一次改進:可改為一次遍歷,**如下:

二次改進:在k值較大的情況下,簡單遍歷效率較低o(k),可將其儲存為有序序列,再用二分查詢o(log2k)來選擇curnum的插入位置,但是插入資料之後要對原有資料進行挪動,也會增加開銷,尚未實現。。。

當時在查詢時想到了二叉排序樹,或者堆排序,只是空間有限,不利於實現,不過這種插入排序的效率還是很可觀的,下次要實現下玩玩

程式設計之美2 5 尋找最大的K個數

問題 從一組數中選出其中最大的k個數,當這組數的個數為幾百 幾百萬 幾百億時分別適合採用哪些演算法?個數為幾百時,使用順序統計法 看演算法導論第9章 演算法思想是對輸入陣列進行遞迴劃分,一邊的資料小於選定數,另一邊的資料大於等於選定數。但和快速排序不同的是,快速排序會遞迴處理劃分的兩邊,而順序統計法...

程式設計之美 2 5 尋找最大的K個數

今天看演算法分析是,看到乙個這樣的問題,就是在一堆資料中查詢到第k個大的值。名稱是 設計一組n個數,確定其中第k個最大值,這是乙個選擇問題,當然,解決這個問題的方法很多,本人在網上搜尋了一番,查詢到以下的方式,決定很好,推薦給大家。所謂 第 前 k大數問題 指的是在長度為n n k 的亂序陣列中s找...

程式設計之美2 5 尋找最大的K個數

在乙個陣列中尋找最大的k個數,我們首先說一種非常簡單的方法,利用快速排序中的分割演算法,即我們經常看見的partition。這個函式會返回乙個 int 型別的值,這個值代表的是前一半數字和後一半數字的分割點,前一半數字都小於等於後一半數字 遞增排序 所以,我們只要找到相對應的分割點,即可以找到最大的...