合併排序是用分治策略實現對n個元素進行排序的演算法,其基本思想是:將待排序的元素分成大小相同的兩個子串行,分別對這兩個子串行進行排序,最終將排好的子串行合併成排好序的序列。
遞迴實現合併排序只是將序列一分為二,直至序列中只有乙個元素為止,然後合併兩個排好序的陣列段,遞迴下去就可以將整個序列排好序。
#includeusing namespace std;
const int maxn = 100;
void merg(int a, int l1, int l2, int r1, int r2);
void mergsort(int a, int left, int right);
int main()
;//測試陣列
mergsort(a, 0, 7);//呼叫歸併排序函式
for (int i = 0; i < 8; i++)
while (1);
return 0;
}void merg(int a, int l1, int l2, int r1, int r2)
//將兩個排好序的陣列合併,其中陣列1的起始下標是l1終止下標是l2,陣列2的分別是r1,r2
else
}while (i while (j <= r2)temp[index++] = a[j++];
for (int i = 0; i < index; i++)
}void mergsort(int a, int left, int right)
}
歸併排序(合併排序)
題目 要求氣泡排序的交換次數,也就是求逆序數的個數。在乙個排列中如果有兩個數的排序和所規定的排序規則相反,則這兩個數是乙個逆序。乙個排列中的逆序的總數就是這個排列的逆序數。用歸併排序,求逆序數的個數。poj 2299 這道題充分印證了,即使merge本身可能用的不多,但分冶的思想卻是無所不在 inc...
歸併排序(合併排序)
合併排序 merge sort 是又一類不同的排序方法,合併的含義就是將兩個或兩個以上的有序資料序列合併成乙個新的有序資料序列,因此它又叫歸併演算法。它的基本思想就是假設陣列a有n個元素,那麼可以看成陣列a是又n個有序的子串行組成,每個子串行的長度為1,然後再兩兩合併,得到了乙個 n 2 個長度為2...
排序 合併排序
與很多有用的演算法類似,合併排序基於這樣乙個技巧 將 2 個大小為 n 2 的已排序序列合併為乙個 n 元素已排序序列僅需要 n 次操作。這個方法叫做合併。我們用個簡單的例子來看看這是什麼意思 通過此圖你可以看到,在 2 個 4元素序列裡你只需要迭代一次,就能構建最終的8元素已排序序列,因為兩個4元...