java中归并排序及Master公式是什么
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,java中归并排序及Master公式是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。基本思想归并排序采取分治的思想进行排序,借用
千家信息网最后更新 2026年11月04日java中归并排序及Master公式是什么
java中归并排序及Master公式是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
基本思想
归并排序采取分治的思想进行排序,借用一张图片说明一下

将n个元素从中间切开,分成两部分。(左边可能比右边多1个数) 将步骤1分成的两部分,再分别进行递归分解。直到所有部分的元素个数都为1。 从最底层开始逐步合并两个排好序的数列。
优点在于,分治之后,合并排序的过程时间复杂度是O(N)(只需要扫描一遍就可以将两个有序的数组合并成一个有序数组)
实现
public static void MergeSort(int[] arr,int l , int r) { if (l == r || r < 0){ return; } int middle = l+(r-l)/2; //取中值,可以防止达到Integer.MaxValue 溢出 MergeSort(arr,l,middle); MergeSort(arr,middle+1,r); sort(arr,l,middle,r); } /** * * @param arr 等待排序的数组 * @param l 左数组第一个指针 * @param middle 分割左右数组 * @param r 右数组最后一个指针 */ private static void sort(int[] arr, int l, int middle, int r) { int[] temp = new int[arr.length]; System.arraycopy(arr, 0, temp, 0, arr.length); int right_first = middle+1; int tempIndex = l; while (l <= middle && right_first <= r){ if (temp[tempIndex] < temp[right_first]){ arr[l++] = temp[tempIndex++]; }else { arr[l++] = temp[right_first++]; } } while (tempIndex <= middle){ arr[l++] = temp[tempIndex++]; } while (right_first <= r ){ arr[l++] = temp[right_first++]; } }对数器验证
我们可以写个对数器,使用暴力排序的方式验证我们的排序方法是否准确
//生成1-100内随机数组 public static int[] getParamArrays(){ int[] result = new int[(int) (Math.random() * 100)]; //随机生成数 for (int i = 0; i < result.length; i++) { result[i] = (int) (Math.random() * 100); } return result; } public static void main(String[] args){ for (int i = 0; i < 1000000; i++) { int[] nums = getParamArrays(); int[] temp = nums; MergeSort(nums,0,nums.length-1); Arrays.sort(temp); //通过自定义比较次数,对随机数组进行排序验证正确性 if (!nums.equals(temp)){ System.out.println("wrong"); } } System.out.println("end"); }递归时间复杂度计算 Master 公式
形如
T(N) = a * T(N/b) + O(N^d)(其中的a、b、d都是常数)
的递归函数,可以直接通过Master公式来确定时间复杂度
如果 log(b,a) < d,复杂度为O(N^d)
如果 log(b,a) > d,复杂度为O(N^log(b,a))
如果 log(b,a) == d,复杂度为O(N^d * logN)
此公式适用于子递归规模相等的情况下
a表示递归的次数也就是生成的子问题数,b表示每次递归是原来的1/b之一个规模,O(N^d) 表示分解和合并所要花费的时间之和(除开递归的复杂度)
此处就是 T(N)= 2*T(N/2)+O(N^1) 适用于第三种情况 复杂度为 O(nlogn)
关于java中归并排序及Master公式是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
排序
复杂
复杂度
数组
递归
公式
时间
问题
部分
生成
验证
有序
两个
个数
元素
对数
思想
情况
指针
方法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云南咖啡
广东万易互联网科技有限公司惠州分公司
科技和互联网公司
互联网公司 科技公司
齐家互联网科技
亿策互联网科技
友谊互联网络科技
润盈互联网科技
互联网科技视频素材
互联网科技公司的市场部门
华服互联网科技官网
宁夏众和广鑫互联网科技有限公司
浙江互联网科技研学营
深圳市优智互联网科技有限公司
国大互联网教育科技有限公司工作
互联网相关科技技术
互联网科技包装股份有限公司上市
广西科技产业互联网是什么
陕西九四连强互联网科技有限公司
保山互联网科技靠谱吗
新华互联网科技学校
互联网最新的科技有限公司
深圳科技互联网
玖二柒互联网科技公司待遇
互联网科技有哪些公司
996高科技互联网公司
张召忠谈中国互联网科技
半导体是互联网高科技吗
易企秀互联网科技是做什么的
中国互联网公司的科技投入