/*
* test.cpp
*
* Created on: 2010-3-16
* Author: Sarah
*/
#include <iostream>
using namespace std;
#define MAX 9999999;
void merge(int array[],int p, int q, int r);
void merge_sort(int array[],int p, int r);
int main()
{
int array[10] = {5,12,7,2,33,6,12,55,3,56};
merge_sort(array,0,9);
for (int i = 0; i<10; i++)
cout<<array[i]<<" ";
}
void merge_sort(int array[],int p,int r)
{
if(p<r)
{
int q = (p+r)/2;
merge_sort(array,p,q);
merge_sort(array,q+1,r);
merge(array,p,q,r);
}
}
void merge(int array[],int p, int q, int r)
{
int n1 = q-p+1;
int n2 = r-q;
int subarray1[n1+1];
int subarray2[n2+1];
for (int i = 0; i<n1; i++)
subarray1[i] = array[p+i];
subarray1[n1] = MAX;
for (int j = 0; j<n2; j++)
subarray2[j] = array[q+j+1];
subarray2[n2] = MAX;
int x = 0;
int y = 0;
for (int n = p; n<= r; n++)
{
if (subarray1[x] < subarray2[y])
{array[n] = subarray1[x];
x++;
}
else
{
array[n] = subarray2[y];
y++;
}
}
}