/*************************************************************************
> File Name: merge_sort.c
> Author:qusijun
> Mail: wiilen.lian@gmail.com
> Created Time: 2013年11月09日 星期六 12时29分03秒
************************************************************************/
#include<stdio.h>
int auxi_array[100] = {0};
int to_sort[10] = {9,2,1,5,10,3,8,2,5,1};
void merge(int *a,int *b,int left,int mid,int right)
{
int s1 = left;
int e1 = mid;
int s2 = mid+1;
int e2 = right;
int k = left;
while(s1<=e1&&s2<=e2)
{
if (a[s1]<a[s2])
b[k++] =a[s1++];
else
b[k++] = a[s2++];
}
while (s1<=mid)
{
b[k++] = a[s1++];
}
while(s2<=left)
{
b[k++] = a[s2++];
}
k--;
while (k>=left)
{
a[k] = b[k];
k--;
}
}
void merge_sort(int *a,int *b,int left,int right)
{
if (left<right)
{
int mid = (left+right)/2;
merge_sort(a,b,left,mid);
merge_sort(a,b,mid+1,right);
merge(a,b,left,mid,right);
}
// return;
}
int main()
{
int i;
for (i=0;i<10;i++)
{
printf("%d,",to_sort[i]);
}
merge_sort(to_sort,auxi_array,0,9);
printf("\n--------------------------merge_sort---------------------------\n");
for (i = 0;i<10;i++)
{
printf("%d,",to_sort[i]);
}
return 0;
}