经典排序——归并排序——C语言版

来源:互联网 发布:淘宝联盟手机版5.2苹果 编辑:程序博客网 时间:2024/06/07 04:47
/*归并排序*//*先将数组从中间逐个拆分,比较拆分后的两组数据,并将其合并,最终合并称为原数组*/#include <stdio.h>int merge(int s[],int low,int mid,int high){    int k[high-low+1];    int i,j,t=0;    i=low;    j=mid+1;    while(i<=mid&&j<=high)    {        if(s[i]<=s[j])        {            k[t]=s[i];            i++;            t++;        }        else        {            k[t]=s[j];            j++;            t++;        }    }    while(i<=mid&&j>high)    {        k[t]=s[i];        //printf("%d\n",s[i]);        i++;        t++;    }    while(j<=high&&i>mid)    {        k[t]=s[j];        j++;        t++;    }    //printf("%d\n",i);    for (i = 0; i < t; i++)    {        s[low + i] = k[i];    }    /*for (i = 0; i <t; i++)     {     printf("%d ",k[i]);     }     printf("\n");*/    return *s;}int merge_sort(int s[],int low, int high){    int mid;    //int i;    if(low<high)    {    mid=(low+high)/2;    merge_sort(s,low,mid);    merge_sort(s,mid+1,high);    merge(s,low,mid,high);    }    /*for (i = 0; i < high; i++)    {        printf("%d ",s[i]);    }    printf("\n");*/    return *s;}int main(){    int s[5];    int n,i;    n=5;    for(i=0;i<n;i++)    {        scanf("%d",&s[i]);    }    merge_sort(s,0,n-1);    for(i=0;i<n;i++)    {        printf("%d ",s[i]);    }}
0 0
原创粉丝点击