您的位置:首页 > 编程语言 > C语言/C++

c语言之合并排序实现

2017-09-09 14:11 190 查看
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

//将两个有序序列合并为一个有序序列

void merge(int a[],int left_pos,int right_pos)

{

     int temp[right_pos-left_pos+1];

     int mid=(left_pos+right_pos)/2;

     int left=left_pos,right=mid+1;

     int count=0;

     while(left<=mid&&right<=right_pos)

     {

         if(a[left]<=a[right])

         {

            temp[count++]=a[left++];

         }

         else

         {

            temp[count++]=a[right++];

         }

     }

     while(left<=mid)

     {

         temp[count++]=a[left++];

     }

     while(right<=right_pos)

     {

         temp[count++]=a[right++];

     }

     memcpy(&a[left_pos],temp,sizeof(temp));

}

//合并排序

void merge_sort(int a[],int left_pos,int right_pos)

{

    if(left_pos<right_pos)

    {

         //一分为二

         int mid=(left_pos+right_pos)/2;

         //左合并

         merge_sort(a,left_pos,mid);

         //右合并

         merge_sort(a,mid+1,right_pos);

         //合而为一

         merge(a,left_pos,right_pos);

    }

}

int main()

{

    //测试用例

    int a[]={331,34,43,64,75,43,7,4234,876,34};

    //合并排序

    merge_sort(a,0,9);

    //打印结果

    int i;

    for(i=0;i<10;i++)

    {

        printf("%d  ",a[i]);

    }

    printf("\n");
system("pause");
return 1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: