歸併排序(合併排序) 遞迴法

2021-10-04 05:16:48 字數 633 閱讀 5030

參考了一些大佬的**,再自己總結了一下。原理基本不變。

歸併排序(合併排序)是一種分治演算法。這個演算法不斷地將乙個陣列分為兩部分,分別對左子陣列和右子陣列排序,然後將兩個陣列合併為新的有序陣列。

穩定:是

時間複雜度:

最優: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...