归并排序

来源:互联网 发布:腾讯代理绝地求生优化 编辑:程序博客网 时间:2024/06/06 15:46
#include<stdio.h>void sort(int *arr,int s,int e);void merge(int *arr,int s,int m,int e);int main(){    int n,arr[100]={0};    scanf("%d",&n);    for(int i=1;i<=n;i++)        scanf("%d",&arr[i]);    sort(arr,1,n);    for(int i=1;i<=n;i++)        printf("%d ",arr[i]);    return 0;}void sort(int *arr,int s,int e){    int m;    if(s<e)   {     m=(s+e)/2;//分成两段    sort(arr,s,m);    sort(arr,m+1,e);    merge(arr,s,m,e);   }}void merge(int *arr,int s,int m,int e){    int l[m-s+2];//左边,因为所有i从1开始,m-s+1再要加1    int r[e-m+1];//右边    for(int i=1;i<=m-s+1;i++)        l[i]=arr[s+i-1];//不用多余参数表示arr下标    for(int i=1;i<=e-m;i++)        r[i]=arr[m+i];    int i=1,j=1,k=s;    while(i<=(m-s+1)&&j<=(e-m))    {        if(l[i]<=r[j])//判断两个数组的元素大小            arr[k++]=l[i++];        else            arr[k++]=r[j++];    }    while(i<=(m-s+1))//排除某一个数组没有处理完        arr[k++]=l[i++];    while(j<=(e-m))        arr[k++]=r[j++];}

0 0
原创粉丝点击