從十億個數中找出前1000個最大的數的演算法

2022-05-21 01:46:49 字數 1371 閱讀 7838

10億個數中找出1000個最大的數的演算法思路:

1,先拿出前1000個數字,並排序,找出最小值為 minvalue .

2,  然後再依次拿出1000個數字,找出最大值為 tempmaxvalue.

3,  如果tempmaxvalue 比 minvalue 大, 則將 themaxvalue 放入前1000個數中,再排序並找出minvalue .

4 .. 依此類推。 即可得到1000個最大的數。 

以下是本人測試的** 。可以參考,歡迎高手指正,謝謝!

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.collections;

namespace test

arraylist list = new arraylist(maxlength);

list.addrange(orignlist);

list.sort();

int retlist = new int[1000];

int j = 0;

for (int i = maxlength - 1; i > maxlength - 1000; i++)

console.writeline(" test end : " + datetime.now.tolongtimestring());

foreach (int i in list)

console.writeline("end: " + datetime.now.tolongtimestring());

}public static void testsort()

arraylist forelist = new arraylist();

if (maxlength > eachcount)

forelist.sort();

int addvalue = eachcount;

for (int j = 1; j < maxlength / eachcount +1 ; j++)

templist.sort();

for (int m = templist.count -1; m >=0 ; m--)}}

else

console.writeline(" test end : " + datetime.now.tolongtimestring());

foreach (int i in forelist)

console.writeline("end: " + datetime.now.tolongtimestring());}}

public class client}}

談從10億個數中找出前10萬個最大的

10億個浮點數大概佔據3g左右的空間,因此全部一次性讀入記憶體目前在個人pc上是不太現實的。本次討論不考慮記憶體等等,只考慮演算法。如果一次性比較排序,然後輸出前面最大的10w個,那麼眾所周知,演算法的時間複雜度不下於o n lgn 此處的n為數的個數 10億 如果用堆排序,由於堆排序像合併排序而不...

100億資料找出最大的1000個數字

這是網際網路領域乙個比較經典的演算法問題 top k 如何在巨大的資料中找出最大,或者訪問量最高的前10個,前100個或者前1000個資料。比如在2億使用者記錄中找出信用等級最高的,在上億個搜尋詞彙中找出被搜尋次數最高的10個關鍵字。前提是資料儲存在檔案中 一般遇到這個問題,第一反應會想到排序,但是...

100億資料找出最大的1000個數字

轉於 1 最容易想到的方法是將資料全部排序。該方法並不高效,因為題目的目的是尋找出最大的10000個數即可,而排序卻是將所有的元素都排序了,做了很多的無用功。2 區域性淘汰法。用乙個容器儲存前10000個數,然後將剩餘的所有數字一一與容器內的最小數字相比,如果所有後續的元素都比容器內的10000個數...