归并排序递归 java实现
package sort;
public class MergeSort1 {
/*** 归并排序
* 简介:将两个(或两个以上)有序表合并成一个新的有序表 即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列
* 时间复杂度为O(nlogn) 稳定排序方式
*/
public static int[] sort(int[] nums, int low, int high) {
int mid = (low + high) / 2;
if (low < high) {
// 左边
sort(nums, low, mid);
// 右边
sort(nums, mid + 1, high);
// 左右归并
merge(nums, low, mid, high);
}
return nums;
}
public static void merge(int[] nums, int low, int mid, int high) {
int[] temp = new int[high - low + 1];
int i = low;// 左指针
int j = mid + 1;// 右指针
int k = 0;
// 把较小的数先移到新数组中
while (i <= mid && j <= high) {
if (nums[i] < nums[j]) {
temp[k++] = nums[i++];
} else {
temp[k++] = nums[j++];
}
}
// 把左边剩余的数移入数组
while (i <= mid) {
temp[k++] = nums[i++];
}
// 把右边边剩余的数移入数组
while (j <= high) {
temp[k++] = nums[j++];
}
// 把新数组中的数覆盖nums数组
for (int k2 = 0; k2 < temp.length; k2++) {
nums[k2 + low] = temp[k2];
}
}
//数组打印函数
public static void printsort(int a[])
{
for(int k=0;k<a.length;k++)
System.out.println(a[k]);
}
// 归并排序的实现
public static void main(String[] args) {
int[] nums = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 };
sort(nums, 0, nums.length-1);
printsort(nums);
}
}
归并排序递归 java实现相关推荐
- 6-6 归并排序(递归法) (10分)
6-6 归并排序(递归法) (10分) 本题要求实现二路归并排序中的归并操作,待排序列的长度1<=n<=1000. 函数接口定义: void Merge(SqList L,int low, ...
- 归并排序 (递归+非递归)
文章目录 1. 归并排序 递归 1.基本思想 2. 使用两个函数完成归并 3. 递归结束条件 4.时间复杂度与空间复杂度计算 1. 时间复杂度 2. 空间复杂度 5. 代码 2. 归并排序 非递归 1 ...
- 归并排序(非递归,Java实现)
归并排序(非递归):自底向上 public class MergeSort {/*** @param arr 待排序的数组* @param left 本次归并的左边界* @param mid 本次归并 ...
- java 归并排序 非递归_归并排序-递归及非递归的JAVA实现
归并排序介绍 平均时间复杂度: O(NLogN) 最好情况时间复杂度: O(NLogN) 最差情况时间复杂度: O(NLogN) 所需要额外空间: 递归:O(N + LogN), 非递归:O(N) 稳 ...
- java的归并排序算法_归并排序算法Java实现
一. 算法描述 归并排序采用了分治策略(divide-and-conquer),就是将原问题分解为一些规模较小的相似子问题,然后递归解决这些子问题,最后合并其结果作为原问题的解. 归并排序将待排序数组 ...
- 归并排序的java代码_归并排序的原理及java代码实现
概述 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并排序采用的是递归来实现, ...
- 归并排序 java实现_归并排序的java实现
归并排序的优点不说了. 做归并排序之前,我先试着将两个有序数组进行排序,合并成一个有序数组. 思路:定义好两个有序数组,理解的时候我先思考了数组只有一个数组的排序,然后是两个元素的数组的排序,思路就有 ...
- C++归并排序递归写法
归并排序的核心:有序子列的归并 两个有序子列,三个指针 A子列,指针Aptr指向首地址 1 13 24 26 B子列,指针Bptr指向首地址 2 15 27 38 Tmp数组,指针Cptr首地址 比较 ...
- 归并排序 java_归并排序(Java实现)
package primary_01;/** 归并排序* 1.算法实现* 2.验证算法的正确性* 3.分析算法的复杂度*/public class Merge_sort {public static ...
最新文章
- vue拖动添加模块展示_一个全新的Vue拖拽特性实现:“移动”部分
- python爬取图片全网通_UC头条:全网通杀——暴强工具推荐: 下载你看到的任意视频...
- docker删除镜像命令_第三章 Docker常用命令之镜像命令
- maven2学习总结(3,maven2在淘宝项目的应用)
- OpenStack 的部署T版(三)——Glance组件
- 26计算限制的异步操作01-CLR
- linux shell 脚本个人规范总结
- 超详细图解!【MySQL进阶篇】SQL优化-索引-存储引擎
- [vue] 在使用计算属性的时,函数名和data数据源中的数据可以同名吗?
- Linux 使用 jstat 命令查看 jvm 的 GC 情况
- ajax 参数带百分号,Ajax请求中带有IPv6地址后的百分号的问题
- 教你怎么蹭网实现和dualwan双倍网速上网
- VPP 安装配置工具vpp-config
- mysql 行转列_详解MySQL行列转换4个实现方案及反向行转列实验测试
- SPOJ-LCS Longest Common Substring
- CentOS各目录的介绍
- 过滤器(Filter)与拦截器(Interceptor )区别
- 阿里云天池大数据竞赛——O2O优惠券使用预测(基于XGBoost)(附python Jupter代码)
- MSP430F415IRTDR
- 交互器、linux下的常用命令