#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int a[]={0,49,38,65,97,13,27};
void printf_array(int *a,int n)
{
int i;
for(i=1;i<=n;i++)
{
printf( "%d ",a[i]);
}
printf("\n");
}
void merge(int *number,int first,int mid,int last)
{
int aux[13]={0};
int i; //第一个数组索引
int j; //第二个数组索引
int k; //临时数组索引
for (i = first, j = mid+1, k = 0; k <= last-first; k++) // 分别将 i, j, k 指向各自数组的首部。
{
//若 i 到达第一个数组的尾部,将第二个数组余下元素复制到 临时数组中
if (i == mid+1)
{
aux[k] = a[j++];
continue;
}
//若 j 到达第二个数组的尾部,将第一个数组余下元素复制到 临时数组中
if (j == last+1)
{
aux[k] = a[i++];
continue;
}
//如果第一个数组的当前元素 比 第二个数组的当前元素小,将 第一个数组的当前元素复制到 临时数组中
if (number[i] < number[j])
{
aux[k] = number[i++];
}
//如果第二个数组的当前元素 比 第一个数组的当前元素小,将 第二个数组的当前元素复制到 临时数组中
else
{
aux[k] = number[j++];
}
}
//printf_array(aux,last-first+1);
for(k=0;k<=last-first;k++)
number[first+k]=aux[k];
}
void merge_sort(int *number,int first,int last)
{
int mid=0;
if(first<last)
{
mid=(first+last)/2;
merge_sort(number,first,mid);
merge_sort(number,mid+1,last);
merge(number,first,mid,last);
}
}
void main()
{
printf_array(a,6);
merge_sort(a,1,6);
printf_array(a,6);
}