题解 | #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); }