归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
下面是我写的源代码 :错误的地方还望大家支出来
#include<iostream>
#include<cstring>
#include<iterator>
using namespace std;
const int MAX = 105;
int temp[MAX],a[MAX];
void merg(int a[], int left, int mid, int right)
{
memset(temp,0,sizeof(temp));
int i = left, j = mid +1,k = left;
while(i <= mid && j <= right)
{
if(a[i] > a[j])
temp[k++] = a[j++];
else
temp[k++] = a[i++];
}
while(i <= mid)
{
temp [k++] = a[i++];
}
while(j <= right)
{
temp[k++] = a[j++];
}
while(left <= right)
{
a[left] = temp[i++];
}
}
void merg_sort(int a[], int left, int right)
{
if(left < right)
{
int mid = (left + right)/2;
merg_sort(a,left,mid);
merg_sort(a,mid+1,right);
merg(a,left,mid,right);
}
}
int main()
{
cout<<"请输入数据个数:";
int n;
cin>>n;
memset(a,0,sizeof(a));
for(int i = 0; i < n; i++)
cin>>a[i];
merg_sort(a ,0 ,n - 1);
copy(a,a+n,ostream_iterator<int>(cout," "));
return 0;
}