#include"iostream"
using namespace std;
//讓兩個數組融合
int Merge(int a[], int low,int mid,int high){
//space暫時的數組去存儲融合好的兩個數組!
int *space = (int *)malloc(sizeof(int)*(high - low + 1));
if (space == NULL){
return -1;
}
int l = low;
int m = mid+1;
int h = high;
int i = 0;
//紅色部分是将兩個數組融合的關鍵
while ((l<= mid)&&(m <= high)){
space[i++] = (a[l]>a[m]) ? a[m++] : a[l++];
//注意這裡你取走誰的值就實行自加;
while (l <=mid){//第一個數組有剩餘!
space[i++] = a[l++];
while (m <= high){//第二個數組有剩餘!
space[i++] = a[m++];
for (int i = low,k=0; i <=high; i++,k++){
a[i] = space[k];//讓臨時數組的值全都指派過去
return 0;
void MergeSort(int a[], int low, int high){
if (low < high){
int mid=(low+high)/2;
//采用分冶法進行排序。讓數組中一部分一部分的排好。最後慢慢融合
MergeSort(a, low, mid);//讓a[low]到a[mid]排好序!
MergeSort(a, mid + 1, high);//讓a[mid+1]到a[high]排好序!
Merge(a, low, mid, high);//最後融合
return;
int main()
{
//int array[] = {21, 25, 49, 25, 16, 8};
int array[] = { 21, 25,56,32,14,5,7,8,64 };
int len = sizeof(array) / sizeof(*array);
MergeSort(array, 0,len-1);
for (int i = 0; i < len; i++){
cout << array[i] << " ";
cout << endl;
system("pause");
本文轉自 神迹難覓 51CTO部落格,原文連結:http://blog.51cto.com/ji123/1926062,如需轉載請自行聯系原作者