演算法筆記之插入 歸併排序

2021-07-24 12:59:21 字數 936 閱讀 3012

對於少量元素的排序時,它是乙個有效的演算法。

其核心思想是乙個乙個把元素插入乙個已經排序好的序列當中進行排序。

其**為:

//a: 需要排序的陣列

//length: 陣列的長度

void insertion_sort(int a, int

length)

a[i + 1] = key;

}}歸併排序演算法的是「合併」步驟中2個已經排好序序列的合併,

//把兩個已經排好序的序列,合併成乙個排好序的序列。

//a: 需要排序的序列;[3,11]

//p: 第乙個序列的起始位置:如 3

//p: 2個序列的中間點(第乙個序列的末位),如:[3,9], [10,11], p 則為9

//r: 第二個序列的末位,如11;

void merge(int a, int p, int q, int r)

for (i = 0; i < n2; i++)

//後面放上哨兵牌

l[n1] = inf;

r[n2] = inf;

i = 0;

j = 0;

for (k = p; i <= r; k++) else

}a[k] = l[i];

i++;

} else else

}a[k] = r[j];

j++;}}

}void merge_sort(int a, int p, int r)

}

merge需要的時間為 t(n), 而merge_sort需要的時間為 t(n * lgn)

雖然歸併演算法的最壞情況執行時間為 o(n lg n), 而插入排序的最壞執行時間為 o(n^2), 但插入排序的n比較小,是比歸併演算法快的,因此在歸併演算法分到一定程式的n時,可嵌入插入排序進行排序再合併。

演算法筆記(六) 之歸併排序

老規矩 妹妹鎮樓 序列中共n個數,將序列兩兩分組,分為 n 2 個組,組內進行單獨排序,然後將這些組兩兩歸併,每兩個組合並成乙個組 於是生成了 n 4 個組,組內依然單獨排序 重複同樣的操作,直到合併成乙個組為止。時間複雜度為o nlogn 序列 12 33,32,23,55,43,23,21,55...

《演算法筆記》 歸併排序

歸併操作,也叫歸併演算法,指的是將兩個順序序列合併成乙個順序序列的方法,平均時間複雜度為o nlogn 歸併排序的實現分為遞迴實現與非遞迴 迭代 實現。如 設有數列 初始狀態 6,202,100,301,38,8,1 第一次歸併後 比較次數 3 第二次歸併後 比較次數 4 第三次歸併後 比較次數 4...

演算法筆記 歸併排序

平均時間複雜度o nlogn 對於乙個待排序的陣列,我們可以先遞迴地將它分成兩半分別排序,然後將結果歸併起來。簡單的說就是把乙個陣列分成兩半,然後把這兩半分別排好序,最後將這兩部分合在一起進行排序,實際情況下,分成兩部分陣列的排序仍然是採用歸併的方式,所以我們會使用到遞迴的思想來操作。前提是待排序陣...