合并排序(C语言)
任務(wù)描述
本關(guān)任務(wù):實(shí)現(xiàn)合并排序算法。
編程要求
根據(jù)提示,在右側(cè)編輯器編寫代碼,完成合并排序的函數(shù)。MergySort(int A[],int start, int end) ,它能將A[]數(shù)組的start到end位置的元素,用合并排序的思想完成排序。
測(cè)試說(shuō)明
平臺(tái)會(huì)對(duì)你編寫的代碼進(jìn)行測(cè)試:
輸入:A={1 3 8 4 9 7 5 2 6 10}, start=0, end=9
結(jié)果:A={1 2 3 4 5 6 7 8 9 10}
解析:對(duì)序列不斷地對(duì)半分,先分前半部分,一直分到只有一個(gè)值的時(shí)候,返回分最后一個(gè)“后半”序列。然后進(jìn)行排序,將排序后的子序列返回,和倒數(shù)第二個(gè)“后半”序列在進(jìn)行合并排序。
/*在下面編程*/void merge(int a[],int l,int r,int mid) # 對(duì)兩個(gè)數(shù)組進(jìn)行合并 {int aux[r-l+1],i,j,k;for(k=l;k<=r;k++) # 將數(shù)組復(fù)制用于取值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); # 合并操作} 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: 二分搜索(C语言)
- 下一篇: 关于pandas绘制图片不显示问题