/*
* =====================================================================================
*
* Filename: merge.c
*
* Description: 归并排序
*
* Version: 1.0
* Created: 2016年11月18日 11时24分29秒
* Revision: none
* Compiler: gcc
*
* Author: guoqingshan (ackevil), wyguoqingshan@163.com
* Organization:
*
* =====================================================================================
*/
#include <stdlib.h>
#include <stdio.h>
int aux[10];
void merge(int a[] ,int lo,int mid ,int hi){
int i=lo;
int j=mid+1;
int k;
for(k=lo;k<=hi;k++){
aux[k]=a[k];
}
for(k=lo;k<=hi;k++){
if(i>mid)
a[k]=aux[j++];
else if(j>hi)
a[k]=aux[i++];
else if(aux[i]<aux[j])
a[k]=aux[i++];
else
a[k]=aux[j++];
}
}
void sort(int a[],int lo ,int hi){
if(hi<=lo)
return ;
int mid=lo+(hi-lo)/2;
sort(a,lo,mid);
sort(a,mid+1,hi);
merge(a,lo,mid,hi);
printf("\n");
while(lo<=hi){
printf("%d,",a[lo]);
lo++;
}
printf("\n");
}
void mergeSort(int a[],int len){
sort(a,0,len-1);
}
int main(){
int a[10]={1,0,5,4,10,5,4,60,3,5};
printf("排序前\n");
int i;
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
mergeSort(a,10);
printf("\n排序后\n");
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
return 0;
}