合并排序(C语言)
任務描述
本關任務:實現合并排序算法。
編程要求
根據提示,在右側編輯器編寫代碼,完成合并排序的函數。MergySort(int A[],int start, int end) ,它能將A[]數組的start到end位置的元素,用合并排序的思想完成排序。
測試說明
平臺會對你編寫的代碼進行測試:
輸入:A={1 3 8 4 9 7 5 2 6 10}, start=0, end=9
結果:A={1 2 3 4 5 6 7 8 9 10}
解析:對序列不斷地對半分,先分前半部分,一直分到只有一個值的時候,返回分最后一個“后半”序列。然后進行排序,將排序后的子序列返回,和倒數第二個“后半”序列在進行合并排序。
/*在下面編程*/void merge(int a[],int l,int r,int mid) # 對兩個數組進行合并 {int aux[r-l+1],i,j,k;for(k=l;k<=r;k++) # 將數組復制用于取值aux[k-l]=a[k];i=l;j=mid+1;for(k=l;k<=r;k++){if(i>mid){a[k]=aux[j-l];j++;}else if(j>r){a[k]=aux[i-l];i++;}else if(aux[i-l]>aux[j-l]){a[k]=aux[j-l];j++;}else{a[k]=aux[i-l];i++;}} }void mergeSort(int a[],int l,int r) {if(l>=r)return ;int mid=(l+r)/2;mergeSort(a,l,mid); # 前半序列mergeSort(a,mid+1,r); # 后半序列merge(a,l,r,mid); # 合并操作} 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 二分搜索(C语言)
- 下一篇: 数据通信中信道传输速率单位bps指的是什