基於比較的內排序演算法(三)

2021-05-25 07:40:33 字數 1616 閱讀 8572

前面發了兩篇內排序的文章。(一)中當時歸併排序並沒有寫出,(二)中今天發現在非遞迴quicksort中stack存在記憶體洩露,並且主程式選項功能支援不是很好,所以今天又練習寫了一遍。

大規模排序時,發現1million整形資料大小為6.8m,int在當前平台佔4b

1million = 1000000 = 106

≈220  總容量=4b*220 =4m≈6.8m,因為這裡面還有空格、回車還有檔案自身的一些資訊佔容量。100million資料大小為673m,1billion資料大小為6.6g。各種檔案系統大小限制在下有說明。當前系統最大申請記憶體可達400g。

c/c++原始碼:sort.cpp

功能:七種常見內排序演算法

c/c++原始碼:data.cpp

功能:隨機生成一定規模的隨機資料

執行結果:

資料規模10無序資料集,迭代1w次

資料規模100有無序資料集,迭代1024次

資料規模100有序資料集,迭代1024次

資料規模10w無序資料集

資料規模10w有序資料集(注意quicksort效能下降)

資料規模100w無序資料集

1billion無序資料集(quick,heap,merge,其它o2的方法已經淘汰)

注意在小規模如果資料集全部可以裝入記憶體,不考慮換頁影響的話,三種排序時間複雜度都是o(nlgn),其中資料顯示快排是時間最快,歸併時間與其差不多,堆排慢於其它兩種方法,大概是1.5倍關係。但是當10億資料,記憶體容量約為4g。快排與堆排需要遍歷遍歷整個陣列,會造成顛簸,而歸併的性質決定了它每次處理的資料有很強的區域性性,不會很大顛簸,所以歸併排比其它兩種效能提高數倍。

**各種檔案系統大小限制

ntfs(windows):支援最大分割槽2tb,最大檔案2tb

fat16(windows):支援最大分割槽2gb,最大檔案2gb

fat32(windows):支援最大分割槽128gb,最大檔案4gb

ext2

最大檔案大小: 1tb

最大檔案極限: 僅受檔案系統大小限制

最大分割槽/檔案系統大小: 4tb

最大檔名長度: 255 字元

預設最小/最大塊大小: 1024/4096 位元組

預設inode分配: 每4096位元組為1

在強制fs檢查前的最大裝載: 20(可配置)

//redhat9預設是ext3的檔案系統

ext3

最大檔案大小: 1tb

最大檔案極限: 僅受檔案系統大小限制

最大分割槽/檔案系統大小: 4tb

最大檔名長度: 255 字元

預設最小/最大塊大小: 1024/4096 位元組

預設inode分配: 每4096位元組為1

在強制fs檢查前的最大裝載: 20(可配置)

reiserfs

最大檔案大小: 1tb

最大檔案極限: 32k目錄,42億檔案

最大分割槽/檔案系統大小: 4tb

最大檔名長度: 255 字元

jfs最小檔案系統大小 16 mb

最大檔案大小: 受體系結構限制

最大檔案極限: 受檔案系統大小限制

預設最小/最大塊大小: 1024/4096 位元組

預設inode分配: 動態

內排序演算法比較

datastructure1.cpp 定義控制台應用程式的入口點。include stdafx.h include include includeusing namespace std define maxsize 4000 可排序表的最大長度 define sortnum 6 測試6中排序方法 d...

演算法 排序 非基於比較的排序

非基於比較的排序與樣本的資料狀況有很大的關係,由於這個限制使其在工程中並不常用。非基於比較的排序有桶排序,基數排序,計數排序。這三者都能做到排序的穩定性,時間複雜度為 o n 空間複雜度為 o n 假設存在一組資料,裡面的資料只有 0 60 使用非基於比較的排序。思路 此時可以使用計數排序,準備 6...

基於比較的演算法之三 插入排序

插入排序的思想是 1。假設第乙個元素是有序的,理解這個有序是針對只有這乙個元素。2。然後依次拿出後面元素插入到前面元素構成的有序序列裡面 這個過程保證了演算法的穩定性,因為遇到等於小於自己的時候就停止插入操作 3。直到最後乙個元素插入到插入到前面的有序序列,完畢。時間複雜度分析 假設陣列有n個元素 ...