前面發了兩篇內排序的文章。(一)中當時歸併排序並沒有寫出,(二)中今天發現在非遞迴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個元素 ...