读书人

排序算法-归并排序

发布时间: 2012-07-22 19:31:15 作者: rapoo

排序算法---归并排序

#include <stdio.h>void merge(int a[], int tmp[],int pleft, int pright, int rightend){        int leftend=pright-1;        int num=rightend-pleft+1;        int pos=pleft;        while(pleft<=leftend && pright<=rightend)        {                if(a[pleft]<=a[pright])                        tmp[pos++]=a[pleft++];                else                        tmp[pos++]=a[pright++];        }        while(pleft<=leftend)                tmp[pos++]=a[pleft++];        while(pright<=rightend)                tmp[pos++]=a[pright++];        int i;        for(i=0;i<num;i++,rightend--)                a[rightend]=tmp[rightend];}void msort(int a[], int tmp[], int left, int right){        int mid=(left+right)/2;        if(left<right)        {                msort(a,tmp,left,mid);                msort(a,tmp,mid+1,right);                merge(a,tmp,left,mid+1,right);        }}void merge_sort(int a[], int n){        int tmp=malloc(n*sizeof(int));        if (tmp!=NULL)        {                msort(a,tmp,0,n-1);                free(tmp);        }        else                printf("error!\n");}
?

读书人网 >移动开发

热点推荐