(演算法)從10000個數中找出最大的10個

2021-09-08 14:19:30 字數 737 閱讀 6790

從10000個整數中找出最大的10個,最好的演算法是什麼?

演算法一:氣泡排序法

千里之行,始於足下。我們先不說最好,甚至不說好。我們只問,如何「從10000個整數中找出最大的10個」?我最先想到的是用氣泡排序的辦法:我們從頭到尾走10趟,自然會把最大的10個數找到。方法簡單,就不再這裡寫**了。這個演算法的複雜度是10n(n=10000)。

演算法二:

有沒有更好一點的演算法呢?當然。維持乙個長度為10的降序陣列,每乙個從陣列拿到的數字都與這個降序陣列的最小值比較。如果小於最小值,就捨棄;如果大於最小值,就把它插入到降序陣列中的合適位置,捨棄原來的最小值。這樣,遍歷一遍就可以找到最大的10個數。因為需要在降序陣列中插入乙個數,對於遍歷的每個數可能都需要這樣,所以其複雜為5n。

偽**如下:

a[n],a[m](分別為原始陣列和降序陣列,其中n=10000,m=10)

a = a[0 ... 9](將陣列a的前10個數賦給陣列a)

sort a(將組數a降序排序)

for i in a[ 10 ... n](從10到n遍歷陣列a)

if a[i] > a[9] then (如果當前值比降序陣列中的最小值大)

刪除a[9]

將a[i]插入a的合適位置,使a保持降序

end if

end for

輸出陣列a

其實演算法二還有乙個優點,就是當陣列很大時,可以將資料分段讀入記憶體處理,而這樣做並不影響結果。

你還有什麼辦法?

從陣列中找出乘積最大的三個數

題目 給定乙個無序陣列,包含正數 負數和0,要求從中找出3個數的乘積,使得乘積最大,要求時間複雜度 o n 空間複雜度 o 1 輸入描述 無序整數陣列a n 輸出描述 滿足條件的最大乘積 輸入例子1 3 4 1 2 輸出例子1 24 思路 由於空間複雜度和時間複雜度的要求,肯定無法先排序,因為排序最...

YTU 1061 從三個數中找出最大的數

時間限制 1 sec 記憶體限制 128 mb 提交 343 解決 245 提交 狀態 討論版 命題人 外部匯入 定義乙個帶參的巨集 或者模板函式 從三個數中找出最大的數。3個短整型數,空格隔開 3個實數,空格隔開 3個長整數,空格隔開 最大的數,對於實數保留2位小數。1 2 3 1.5 4.7 3...

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

10億個數中找出1000個最大的數的演算法思路 1,先拿出前1000個數字,並排序,找出最小值為 minvalue 2,然後再依次拿出1000個數字,找出最大值為 tempmaxvalue.3,如果tempmaxvalue 比 minvalue 大,則將 themaxvalue 放入前1000個數中...