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...