原题链接:数据结构-归并排序
解题思路:看视频学的,那个视频真的超级详细,视频地址我放下面了。
教学视频:https://www.bilibili.com/video/BV1Pt4y197VZ?from=search&seid=15030035287471509854&spm_id_from=333.337.0.0
参考代码:
#include <stdio.h> #include <stdlib.h> void MergeSort(int arr[], int tempArr[], int left, int right); void Msort(int arr[], int n); void Merge(int arr[], int tempArr[], int left, int middle, int right); int main() { int n; scanf("%d", &n); int arr[n]; for (int i = 0; i < n;i++) { scanf("%d", &arr[i]); } Msort(arr, n); for (int i = 0; i < n;i++) { printf("%d ", arr[i]); } printf("\n"); return 0; } void Msort(int arr[], int n) { int *tempArr=(int*)malloc(n* sizeof(int)); if(tempArr) { MergeSort(arr,tempArr, 0, n-1); free(tempArr); } else { printf("error:failed to allocate memory"); } } void MergeSort(int arr[], int tempArr[], int left, int right) { if(left<right) { int middle=left+(right-left)/2; MergeSort(arr,tempArr,left,middle); MergeSort(arr,tempArr,middle+1,right); Merge(arr,tempArr,left,middle,right); } } void Merge(int arr[], int tempArr[], int left, int middle, int right) { int l_pos=left; int r_pos=middle+1; int pos=left; while(l_pos<=middle&&r_pos<=right) { if(arr[l_pos]<arr[r_pos]) { tempArr[pos++]=arr[l_pos++]; } else { tempArr[pos++]=arr[r_pos++]; } } while(l_pos<=middle) { tempArr[pos++]=arr[l_pos++]; } while(r_pos<=right) { tempArr[pos++]=arr[r_pos++]; } while(left<=right) { arr[left]=tempArr[left]; left++; } }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复