关于归并排序

来源:互联网 发布:淘宝店铺需要的软件 编辑:程序博客网 时间:2024/06/05 08:33

应该说早就知道了,但是一直没有实现,一般用快排的,但是今天实现时,问题还不少啊,主要是等号问题的

#include <stdio.h>#include <stdlib.h>void combine(int low,int high,int arr[])  //将两列有顺序的合并起来{    int i,j,m,n;    int brr[30]={0};    for(i=low;i<=high;i++)                             //将arr的值赋给brr    {        brr[i]=arr[i];    }    j=(low+high)/2;                                   //其中一个数组的上限    n=j+1;                                             //另一数组的下限    m=low;    while(n<=high||low<=j)                            //n和low分别表示两个数组的变化指针 {    while((brr[low]>=brr[n]||low>j)&&n<=high)          //当前一个数组已经完了或都第一个当前    {                                                 //小于第二个的当前取第一个的,注意等号。        arr[m]=brr[n];        n++;        m++;    }    while((brr[low]<=brr[n]||high<n)&&low<=j)    {        arr[m]=brr[low];        low++;        m++;    } }}void mergesort(int arr[],int low,int high){    int t,i,j;    if(high>low)    {        mergesort(arr,low,(high+low)/2);     //divide        mergesort(arr,(high+low)/2+1,high);        combine(low,high,arr);    }}int main(){    int i ,n;    int arr[30]={0};    scanf("%d",&n);    for(i=0;i<n;i++)    {        scanf("%d",&arr[i]);    }    mergesort(arr,0,n-1);    for(i=0;i<n;i++)    {        printf("%d ",arr[i]);    }    return 0;}


原创粉丝点击