归并排序是一种稳定的排序算法,我们在这里所说的归并是二路归并排序。是将两个有序表合并成一个新的有序表,该算法是分治思想的经典应用。采用递归的方法可以很容易的写出程序。在采用递归的时候,我们在分析归并排序的时候可以采用从顶向下的分析方法。
看代码:
// mersort.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int num[50];
int temp[50];
void sort(int i,int mid,int j)
{
int k,pi,pj;
pi = i;
pj = mid + 1;
for(k = i;k<=j;k++)
{
if(pi > mid)
{
temp[k] = num[pj++];
}
else if(pj > j)
{
temp[k] = num[pi++];
}
else
{
if(num[pi] <= num[pj])
temp[k] = num[pi++];
else
{
temp[k] = num[pj++];
}
}
}
for(k=i;k<=j;k++)
{
num[k] = temp[k];
}
}
void merge(int i,int j)//merge sort
{
if(i >= j)
{
return ;
}
int mid;
mid = (i+j)/2;
merge(i,mid); //归并排序前一半
merge(mid+1,j);//归并排序后一半
//此时数组被分成两个有序序列
sort(i,mid,j);//将数组排序
}
int main()
{
int n,i;
cin>>n;
for(i=0;i<n;i++)
{
cin>>num[i];
}
merge(0,n-1);
for(i=0;i<n;i++)
{
cout<<num[i]<<" ";
}
return 0;
}