排序算法-归并排序

/*
 * =====================================================================================
 *
 *       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;
}
posted @ 2016-12-02 17:09  时过境迁。  阅读(97)  评论(0)    收藏  举报