听说你还不会归并排序?




明确递归方法的功能边界;
得到递归的递推关系;
给定递归的终止条件。
递归方法均可按照这三步进行,切忌不要陷入递归实现的细节中。下面以归并排序算法的书写为例,来谈一下递归方法的具体写法。

private static void mergeSort(int[] arr,int left,int right);



/**** @param arr 要合并的数组* @param left 左边界* @param mid 中间的分界* @param right 右边界*/private static void merge(int[] arr,int left,int mid,int right){int[] helpArr = new int[right - left + 1];//首先定义一个辅助数组int lPoint = left;//左指针int rPoint = mid + 1;//右指针int i = 0;//辅助指针while(lPoint <= mid && rPoint <= right){//比较并填充辅助数组if(arr[lPoint] <= arr[rPoint])helpArr[i++] = arr[lPoint++];elsehelpArr[i++] = arr[rPoint++];}while(lPoint <= mid){//将剩余元素填充至辅助数组helpArr[i++] = arr[lPoint++];}while(rPoint <= right){helpArr[i++] = arr[rPoint++];}for(int j = 0;j < helpArr.length;j ++){//将辅助数组中的元素回填至原数组arr[left + j] = helpArr[j];}}
private static void mergeSort(int[] arr,int left,int right){if(arr == null || right == left)//终止条件return ;int mid = left + (right - left) / 2;//确定分割的边界mergeSort(arr,left,mid);//对左半部分调用递归方法,使其有序mergeSort(arr,mid + 1,right);//对右半部分调用递归方法,使其有序merge(arr,left,mid,right);//合并左右两部分,使整个数组有序}
/*** 归并排序算法* @param arr*/public static void mergeSort(int[] arr){mergeSort(arr,0,arr.length - 1);//调用写好的递归版归并排序方法}

时间复杂度:一个算法执行所消耗的时间;
空间复杂度:运行完一个算法所需的内存大小;
原地排序:在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储空间进行比较和交换的数据排序。
非原地排序:需要利用额外的数组来辅助排序。
稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。
非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。
下面我们分析下归并排序算法的性能。

空间复杂度分析:在排序过程中使用了一个与原数组等长的辅助数组,估空间复杂度为O(n)。
稳定性分析:由排序过程可以知道,归并排序是一种稳定排序。
是否原地排序:排序过程中用到了辅助数组,所以是非原地排序。
本文源码已同步至github,地址:https://github.com/zhanglianchao/AllForJava/tree/master/src/algorithm/sort。
【END】

更多精彩推荐
?鹿晗都有 AI 粉了,为什么 AI 换脸剧的效果还这么渣?
?曾遭周鸿祎全网封杀的360猛将:草根打工到36岁身家上亿的逆袭!
?原来疫情发生后,全球加密社区为了抗击冠状病毒做了这么多事情!

关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 应变克难开新局 7904183
- 2 日舰曾收到中方提示 7809393
- 3 山姆就“麻薯盒中出现活老鼠”致歉 7713796
- 4 “好房子”长啥样 7617728
- 5 仅退款225个快递女子已归案 7523704
- 6 鹤岗房价2年涨超20% 7426829
- 7 琉球归属问题被迫无限期搁置 7328525
- 8 你点的三家外卖可能出自同一口锅 7235928
- 9 中方回应向日本出口稀土出现延误 7142582
- 10 入冬以来最大范围风雪天气来了 7048561







CSDN
