#include<stdio.h>
static int merge(int *temp, int *arr, int start, int mid, int end)
{
int i = 0;
int j = 0;
int k = 0;
i = start;
j = mid+1;
while(i<=mid&&j<=end){
if(arr[i]<arr[j])
temp[k++] =arr[i++];
else
temp[k++] = arr[j++];
}
while(i<=mid){
temp[k++] =arr[i++];
}
while(j<=end){
temp[k++] = arr[j++];
}
printf("merge\t");
for(i=0; i<k; i++){
printf("%d\t", temp[i]);
}
printf("\n");
k = 0;
while(start <= end){
arr[start++] = temp[k++];
}
}
static int sort(int *arr, int start, int end, int *temp)
{
int i = 0;
for(i=start; i<=end; i++){
printf("%d\t", arr[i]);
}
printf("\n");
if(arr!=NULL&&end>start){
int mid = (start + end)/2;
//if(mid>start)
sort(arr, start, mid, temp);
//if(mid+1<end)
sort(arr, mid+1, end, temp);
merge(temp, arr, start, mid, end);
}
return 0;
}
int main()
{
int arr[] = {8,4,5,7,1,3,6,2};
int temp[sizeof(arr)/sizeof(arr[0])];
sort(arr, 0, sizeof(arr)/sizeof(arr[0])-1, temp);
int i = 0;
for(i=0; i<sizeof(arr)/sizeof(arr[0]); i++){
printf("%d\t", temp[i]);
}
printf("\n");
}

