大資料量下排序演算法小結

2021-08-21 17:56:19 字數 1017 閱讀 9975

堆排序和快速排序的比較

堆排序是接近nlgn的下界,而快排有效能壞的情況,為何還是快排表現更優秀呢?

1.堆排序是處理陣列中相隔較遠的資料,快速排序是根據兩個 指標按序遍歷的,根據暫存器、快取記憶體的熱cache、 區域性性原理,快排更好

2.快排的極端情況太難復現,而且可以 用隨機基準數

3.快排還有各種優化的方案

基數排序的效能

在低資料量的時候,效能很不錯;但是非常佔記憶體。一般我們不會採取高記憶體換空間的演算法(資料量大的時候就太恐怖了)

綜合性能

資料多到記憶體裝不下怎麼辦?

(假設記憶體有100m容量)比如1g的資料,分10份,每份100m。先用快排讓每乙份各自排好序,然後寫到檔案中。這10份100m的 檔案這個時候已經有序了。這10份每份取9m,一共90m,使得他們合併。合併後的結果放到10m的快取區中,滿了就clear,io到 檔案中。

一百、一萬、一億選取什麼演算法最好?

100可以基數、桶,這些很佔記憶體,而且有一些限制條件,但是很快!

10000可以快排

一億只能快排(因為熱cache,所以比堆排序好)+歸併(資料太大裝不下)

大部分資料有序的情況下,用什麼 演算法比較好?

插入+二分。

從大量資料中取出前100個

第一反應是開始做題嗎?no,大量資料,記憶體肯定是裝不下的。那我們就假設所有資料被分成了n份吧。

先看第乙份,排序前100個,然後後面的數都插入+二分去修改前100個數。

乙份讀完,就clear後面的數, 載入新的檔案進來。

這樣一次遍歷就解決了。

這兩篇待學習

大資料量演算法

給40億個不重複的unsigned int的整數,沒排過序的,然後再給乙個數,如何快速判斷這個數是否在那40億個數當中 位圖思想解法 include stdio.h include stdlib.h include memory.h define max num 4294967295 int mai...

排序演算法大資料量測試結果

2014 01 06 14 53 06 mergesorter排序40000個數1次所用平均時間為 19.0011 毫秒 2014 01 06 14 53 06 mergesorter排序60000個數1次所用平均時間為 26.0015 毫秒 2014 01 06 14 53 06 mergesor...

大資料量處理

看看這個,異曲同工,永遠不超時 該程式是針對非常龐大的資料庫開發的,沒有用迴圈 用途 對過萬條資料的資料庫字段內容批量替換 資料庫連線 dim beeyee dbname,connstr,conn,intsn1 dim content,num,intsn,intidno,strcodea,strco...