參考了一些大佬的**,再自己總結了一下。原理基本不變。
歸併排序(合併排序)是一種分治演算法。這個演算法不斷地將乙個陣列分為兩部分,分別對左子陣列和右子陣列排序,然後將兩個陣列合併為新的有序陣列。
穩定:是
時間複雜度:
最優:o(nlog(n))
最差:o(nlog(n))
平均:o(nlog(n))
#include
using
namespace std;
void
merge
(int
*a,int l,
int m,
int r)
else}}
void
merge_sort
(int
*a,int l,
int r)
}int
main()
結果: 歸併排序演算法 遞迴法
首先乙個問題,如何將兩個整數進行公升序排序?這不簡單嗎。將兩個數比較,再將小的放在前面,大的放在後面。然後如何將兩個公升序的陣列排序為乙個陣列呢?我知道我知道 建立第三個陣列,將需要那兩個陣列按下標順序進行比較,然後將小的數放入第三個陣列中,在將兩者下標加一。如,將a陣列與b陣列的第乙個元素比較,假...
排序(2)歸併排序(遞迴 合併排序)
用到遞迴 合併,所以叫歸併。public static int data 遞迴 param temp 臨時陣列 param sindex 開始索引 param eindex 結束索引 private static void recursion int temp,int sindex,int eind...
歸併排序(合併排序)
題目 要求氣泡排序的交換次數,也就是求逆序數的個數。在乙個排列中如果有兩個數的排序和所規定的排序規則相反,則這兩個數是乙個逆序。乙個排列中的逆序的總數就是這個排列的逆序數。用歸併排序,求逆序數的個數。poj 2299 這道題充分印證了,即使merge本身可能用的不多,但分冶的思想卻是無所不在 inc...