正文

【原创】归并排序算法的原理及实现2009-12-06 17:45:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/shenjinggege/50262.html

分享到:

#include <stdio.h>int main(){    int arr[]={9,7,5,8,4,1,3,2,6};    int i;    void merge_sort(int vec1[],int vec2[],int size1,int size2);    void recursive_merge(int arr[],int size);    recursive_merge(arr,sizeof(arr)/sizeof(int));    for(i=0;i<sizeof(arr)/sizeof(int);i++)        printf("%d\n",*(arr+i));    getchar();    return 0;}void merge_sort(int vec1[],int vec2[],int size1,int size2){    int i=0,j=0,k=0;        int *pvec= (int*) malloc(size1+size2);    while(1)    {        *(pvec+k++)=vec1[i]<=vec2[j]?vec1[i++]:vec2[j++];        if(i==size1)        {            while(j<size2) *(pvec+k++)=vec2[j++];                break;        }        else if(j==size2)        {            while(i<size1) *(pvec+k++)=vec1[i++];            break;        }    }    for(i=0;i<size1;i++)        vec1[i]=*(pvec+i);    for(i=0;i<size2;i++)        vec2[i]=*(pvec+i+size1);}void recursive_merge(int arr[],int size){    int IsEven=size%2==0?1:0;    if(size>1)    {        recursive_merge(arr,IsEven?size/2:(size+1)/2);        recursive_merge(&arr[IsEven?size/2:(size+1)/2],IsEven?size/2:(size+1)/2-1);        merge_sort(arr,&arr[IsEven?size/2:(size+1)/2],IsEven?size/2:(size+1)/2,IsEven?size/2:(size+1)/2-1);    }}

阅读(1174) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册