1億數據找出最大的1w個算法
1. 分塊法spa
解法:A. 採用分塊法,將1億數據分紅100w一塊,共100塊。orm
B. 對每塊進行快速排序,分紅兩堆,若是大堆大於1w個,則對大堆再次進行快速排序,直到小於等於1w中止排序
(假設此時大堆有N個),此時對小堆進行排序,取最大的10000-N個,這樣就找到了這100w中最大的1w個。it
C. 100塊,每塊選出最大的1w,再對這100w使用一樣的方法,找出最大的1w個遍歷
2. Bit-Map方法
適用範圍:可進行數據的快速查找,判重,刪除,通常來講數據範圍是int的10倍如下數據
解法:用一個例子來講明吧,這樣直觀一點。margin
假設對7, 6, 3, 5這四個數進行排序,首先初始化一個byte,8位,可表示爲0 0 0 0 0 0 0 0top
對於7,將第七位置1,對剩下幾個數執行一樣操做,則最後該byte變爲 0 0 1 0 1 1 1 0
最後一步,遍歷,將置1位的序號逐個輸出,即3,5, 6,7
3. 紅黑樹
解法:用一個紅黑樹維護這1w個數,而後遍歷其餘數字,來替換紅黑樹中最小的數(這是在網上看到的算法,
我感受用贏 者樹也是能夠的)
若是數據中有重複,則對於Bit-Map,找出前1w個數,對這1w個數創建Hash Table,而後再次遍歷這一億個數,同時對Hash Table中的數字 計數,最後根據計數找出前1w個(包含重複)