目錄5.1.2 低位優先的字串排序
5.1.3 高位優先的字串排序
5.1.4 三向字串快速排序
5.1.5 字串排序演算法的選擇
高位優先(msd)的字串排序:從左到右檢查鍵中的字元
5.1.1.1 頻率統計
for(int i = 0; i < n; i++)
count[a[i].key() + 1]++;
5.1.1.2 將頻率轉換為索引for(int r = 0; r < r; r++)
count[r+1] += count[r];
5.1.1.3 資料分類for(int i = 0; i < n; i++)
aux[count[a[i].key()]++] = a[i];
5.1.1.4 回寫for(int i = 0; i < n; i++)
a[i] = aux[i];
鍵索引計數法排序n個鍵為0到r-1之間的整數的元素需要訪問陣列11n+4r+1次。
public class lsd
}}
低位優先的字串排序演算法能夠穩定地將定長字串排序。
對於基於r個字元的字母表的n個以長為w的字串為鍵的元素,低位優先的字串排序需要訪問~7wn+3wr次數組,使用的額外空間與n+r成正比。5.1.3.1 對字串末尾的約定
此外,增加乙個條件語句以在子陣列較小時切換至插入排序
public class msd
public static void sort(string a)
private static void sort(string a, int lo, int hi, int d)
int count = new int[r+2]; //計算頻率
for(int i = lo; i <= hi; i++)
count[charat(a[i], d) + 2]++;
for(int r = 0; r < r + 1; r++) //將頻率轉換為索引
count[r+1] += count[r];
for(int i = lo; i <= hi; i++) //資料索引
aux[count[charat(a[i], d) + 1]++] = a[i];
for(int i = lo; i <= hi; i++) //回寫
a[i] = aux[i - lo];
for(int r = 0; r < r; r++) //遞迴地以每個字元為鍵進行排序
sort(a, lo + count[r], lo + count[r+1] - 1, d+1);
}}
5.1.3.7 效能要將基於大小為r的字母表的n個字串排序,高位優先的字串排序演算法平均需要檢查nlogrn個字元;訪問陣列的次數在8n+3r到~7wn+3wr之間,其中w是字串的平均長度;最壞情況下所需的空間與r乘以最長的字串的長度之積成正比。
public class quick3string
public static void sort(string a)
private static void sort(string a, int lo, int hi, int d)
//a[lo..lt-1] < v = a[lt..gt] < a[gt+1..hi]
sort(a, lo, lt-1, d);
if(v > 0) sort(a, lt, gt, d+1);
sort(a, gt+1, hi, d);
}}
5.1.4.4 效能要將含有n個隨機字串的陣列排序,三向字串快速排序平均需要比較字元~2nlnn次。演算法
是否穩定
原地排序
執行時間
額外空間
優勢領域
字串的插入排序是是
n到n2之間
1小陣列或是已經有序的陣列
快速排序否是
nlog2n
logn
通用排序演算法,特別適合用於空間不足的情況
歸併排序是否
nlog2n
n穩定的通用排序演算法
三向快速排序否是
n到nlogn之間
logn
大量重複鍵
低位優先的字串排序是否
nwn較短的定長字串
高位優先的字串排序是否
n到nw之間
n+wr
隨機字串
三向字串快速排序否是
n到nw之間
w+logn
通用排序演算法,特別適合用於含有較長公共字首的字串
第五章 讀書筆記
第五章 搭建s3c6410開發板的測試環境 一.s3c6410開發板簡介.s3c6410是三星公司推出的一款低功耗,高價效比的risc處理器,它基於arm11核心,可廣泛應用於移動 和通用處理器等領域。該處理器有乙個非常先進的3d加速器,能實現4m s的3d加速 二.安裝串列埠除錯工具 minico...
C Template 讀書筆記 第五章
內容 技巧性基礎知識 關鍵字 typename template this 模板的模板引數 零初始化 字串的模板實參 具體內容描述 1.對模板使用typename 場景 template class test 這裡需要增加typename,需要標記告訴編譯器這個是宣告乙個模板引數型別t裡面的subt...
C 讀書筆記 第五章 語句
空語句 程式某處語法上需要一條語句而邏輯上不需要 建議使用時加注釋 while cin s s sought 空塊的作用等同於空語句 上面的 也可以用 代替 懸垂 else switch case關鍵字和它對應的值一起被稱為case標籤,case標籤必須是整形常量表示式 case 3.14 錯誤 不...