归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序列。
例如有两个有序表:(7,10,13,15)和(4,8,19,20),归并后得到的有序表为:(4,7,8,10,13,15,19,20)。
代码:
#include <iostream>
using namespace std;
void mergearray(int a[], int first, int mid, int last, int temp[])
{
int i = first, j = mid + 1;
int m = mid, n = last;
int k = 0;
while (i <= m && j <= n)
{
temp[k++] = a[i] > a[j] ? a[j++] : a[i++];
}
while (i <= m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
for (i = 0; i < k; i++)
a[first + i] = temp[i];
}
void mergeSort(int data[], int start, int end ,int temp[]){
if(start < end){
mergeSort(data,start ,(start+end)/2,temp);
mergeSort(data,(start+end)/2+1 ,end,temp);
mergearray(data,start,(start+end)/2,end,temp);
}
}
int main(){
int input[9]={0,1,1,5,6,71,3,4,9};
int output[9];
mergeSort( input ,0,8,output);
// mergeSort(input,0,8);
for(int i=0;i<9 ;i++){
cout << output[i] <<" ";
}
// cout<< BinarySearch(input,0,8,8);
return 0;
}
运行结果: