`
ackerman
  • 浏览: 72699 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

排序算法---归并排序

阅读更多

#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");
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics