合併排序實現

2021-05-25 18:12:35 字數 932 閱讀 7002

code:

#include

using

namespace std;   

/******************************************

* 合併兩個有序的子陣列

* * 輸入:整數陣列a,下標p,q,r,元素個數m

*            其中a[p]~a[q]和a[q+1]~a[r]已按遞增順序排序

* 輸出:按遞增順序排序的子陣列a[p]~a[r]

******************************************/

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

}   

if(i==q+1)   

}else   

}   

k = 0;   

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

delete bp;   

}   

/******************************************

* 合併排序演算法

* * 輸入:具有n個元素的陣列a

* 輸出:按遞增順序排序的陣列a

******************************************/

void merge_sort(int a, int n)   

if(i+smerge(a,i,i+s-1,n-1,n-i);   

}   

}   

}   

int main()   

merge_sort(a,n);   

cout<<"排序結果:"

<}   

cout<

return 0;   

}  

合併排序 C 實現

寫給自己的,避免忘記!合併排序演算法採用先分治,再合併的思路。此思路根據演算法導論原理,在合併演算法中,是將兩個已經排序好的陣列進行合併。我的演算法是可以對任意可變陣列進行排序,對於待合併的陣列元素為n,最多比較n次,為實現高效率,避免每次檢查陣列,檢查到最後導致溢位,在每乙個陣列後面加乙個哨兵,哨...

遞迴實現合併排序

subject 計算機演算法設計與分析 title 2.7.1 遞迴實現合併排序 coder hao class 計科0906 num 0304090614 date sept 25th,2011 includeusing namespace std 用於合併的函式 template void me...

歸併排序(合併排序)

題目 要求氣泡排序的交換次數,也就是求逆序數的個數。在乙個排列中如果有兩個數的排序和所規定的排序規則相反,則這兩個數是乙個逆序。乙個排列中的逆序的總數就是這個排列的逆序數。用歸併排序,求逆序數的個數。poj 2299 這道題充分印證了,即使merge本身可能用的不多,但分冶的思想卻是無所不在 inc...