有哪些可以做策划方案的网站,网站怎么描述,单位网站 单位网页 区别,站长统计app网站文章目录 一、归并排序的思路二、代码编写 先赞后看#xff0c;养成习惯#xff01;#xff01;#xff01;^ _ ^3 ❤️ ❤️ ❤️ 码字不易#xff0c;大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦#xff01; 所属专栏:排序算法 一、归并排序的思路 单… 文章目录 一、归并排序的思路二、代码编写 先赞后看养成习惯^ _ ^3 ❤️ ❤️ ❤️ 码字不易大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦 所属专栏:排序算法 一、归并排序的思路 单个排序这个是递归的结束条件一个数不需要排 递归展开图 二、代码编写 代码讲解 1.根据递归展开图我们先要递归到只有一个数 2.接着我们开始两两归并以此类推最后全部归并完成 注意我们需要准备开一块空间准备接收归并完成的数然后再把归并完的tmp数组中的数拷贝到原数组 细节某两组数据进行归并时如果某组的数组已经归并完了那么另一组的还未拷贝的数一定大于已经归并完成的一组接下来我们直接循环把未归并完成的数以此拷贝进入tmp中 #define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
#includestdlib.h
void MergeSort(int* a, int begin, int end,int* tmp)
{if (begin end)return;int mid (begin end) / 2;MergeSort(a, begin, mid,tmp);MergeSort(a, mid1, end,tmp);int begin1 begin, end1 mid;int begin2 mid 1, end2 end;int j begin;while (begin1 end1 begin2 end2){if (a[begin1] a[begin2])tmp[j] a[begin2];elsetmp[j] a[begin1];}while (begin1 end1){tmp[j] a[begin1];}while (begin2 end2){tmp[j] a[begin2];}memcpy(abegin, tmpbegin, sizeof(int)*(end-begin1));}void MergeTest(int* a, int n)
{int* tmp (int*)malloc(sizeof(int) * n);if (tmp NULL){perror(malloc fail);return;}MergeSort(a, 0,n-1,tmp);
}int main()
{int a[11] {3,5,2,1,6,7,9,8,10,11,4};MergeTest(a,sizeof(a)/sizeof(int));for (int i 0; i 11; i)printf(%d , a[i]);return 0;
}