题解 | #1-10排序算法#

1-10排序算法

https://www.nowcoder.com/practice/678417477f424f8f8f97c54941abf631

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
# define Max 10

void initial_a(int a[]){
    for(int i=0;i<10;i++){
        a[i]=rand();
    }
}

void merge(int *a,int l,int r,int m){
    int *temp=(int*)malloc((r-l)*4);
    int i=l,j=m,index=0;
    while(i<m&&j<r){
        temp[index++]=a[i]>a[j]?a[j++]:a[i++];
    }
    while(i<m){
        temp[index++]=a[i++];
    }
    while(j<r){
        temp[index++]=a[j++];
    }
    for(int i=0;i<index;i++){
        a[l+i]=temp[i];
    }
    free(temp);
}

void mergesort(int *a,int l,int r){
    if(r-l<=1){
        return;
    }
    int mid=(r+l)>>1;
    mergesort(a, l, mid);
    mergesort(a,mid,r);
    merge(a,l,r,mid);

}

void print_a(int *a){
    for(int i=0;i<10;i++){
        printf("%d\n",a[i]);
    }
}

int main() {
    int a_size;
    srand((unsigned)time(NULL));
    int a[Max];
    initial_a(a);
    a_size=sizeof(a)/sizeof(int);
    mergesort(a,0,a_size);
    print_a(a);
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务