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实现相关推荐

  1. 6-6 归并排序(递归法) (10分)

    6-6 归并排序(递归法) (10分) 本题要求实现二路归并排序中的归并操作,待排序列的长度1<=n<=1000. 函数接口定义: void Merge(SqList L,int low, ...

  2. 归并排序 (递归+非递归)

    文章目录 1. 归并排序 递归 1.基本思想 2. 使用两个函数完成归并 3. 递归结束条件 4.时间复杂度与空间复杂度计算 1. 时间复杂度 2. 空间复杂度 5. 代码 2. 归并排序 非递归 1 ...

  3. 归并排序(非递归,Java实现)

    归并排序(非递归):自底向上 public class MergeSort {/*** @param arr 待排序的数组* @param left 本次归并的左边界* @param mid 本次归并 ...

  4. java 归并排序 非递归_归并排序-递归及非递归的JAVA实现

    归并排序介绍 平均时间复杂度: O(NLogN) 最好情况时间复杂度: O(NLogN) 最差情况时间复杂度: O(NLogN) 所需要额外空间: 递归:O(N + LogN), 非递归:O(N) 稳 ...

  5. java的归并排序算法_归并排序算法Java实现

    一. 算法描述 归并排序采用了分治策略(divide-and-conquer),就是将原问题分解为一些规模较小的相似子问题,然后递归解决这些子问题,最后合并其结果作为原问题的解. 归并排序将待排序数组 ...

  6. 归并排序的java代码_归并排序的原理及java代码实现

    概述 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并排序采用的是递归来实现, ...

  7. 归并排序 java实现_归并排序的java实现

    归并排序的优点不说了. 做归并排序之前,我先试着将两个有序数组进行排序,合并成一个有序数组. 思路:定义好两个有序数组,理解的时候我先思考了数组只有一个数组的排序,然后是两个元素的数组的排序,思路就有 ...

  8. C++归并排序递归写法

    归并排序的核心:有序子列的归并 两个有序子列,三个指针 A子列,指针Aptr指向首地址 1 13 24 26 B子列,指针Bptr指向首地址 2 15 27 38 Tmp数组,指针Cptr首地址 比较 ...

  9. 归并排序 java_归并排序(Java实现)

    package primary_01;/** 归并排序* 1.算法实现* 2.验证算法的正确性* 3.分析算法的复杂度*/public class Merge_sort {public static ...

最新文章

  1. vue拖动添加模块展示_一个全新的Vue拖拽特性实现:“移动”部分
  2. python爬取图片全网通_UC头条:全网通杀——暴强工具推荐: 下载你看到的任意视频...
  3. docker删除镜像命令_第三章 Docker常用命令之镜像命令
  4. maven2学习总结(3,maven2在淘宝项目的应用)
  5. OpenStack 的部署T版(三)——Glance组件
  6. 26计算限制的异步操作01-CLR
  7. linux shell 脚本个人规范总结
  8. 超详细图解!【MySQL进阶篇】SQL优化-索引-存储引擎
  9. [vue] 在使用计算属性的时,函数名和data数据源中的数据可以同名吗?
  10. Linux 使用 jstat 命令查看 jvm 的 GC 情况
  11. ajax 参数带百分号,Ajax请求中带有IPv6地址后的百分号的问题
  12. 教你怎么蹭网实现和dualwan双倍网速上网
  13. VPP 安装配置工具vpp-config
  14. mysql 行转列_详解MySQL行列转换4个实现方案及反向行转列实验测试
  15. SPOJ-LCS Longest Common Substring
  16. CentOS各目录的介绍
  17. 过滤器(Filter)与拦截器(Interceptor )区别
  18. 阿里云天池大数据竞赛——O2O优惠券使用预测(基于XGBoost)(附python Jupter代码)
  19. MSP430F415IRTDR
  20. 交互器、linux下的常用命令

热门文章

  1. 微信小程序使用echarts图表,与延迟加载图表,解决echarts文件过大
  2. 全球首个基于区块链技术的微信智能名片正式发布
  3. 等额本息和等额本金公式详解
  4. 高级驾驶辅助系统(ADAS)的安全性和静态分析
  5. SqlDbx连接Oracle数据库
  6. Oracle安装与卸载
  7. PHP 开发基础知识笔记
  8. Google Earth Engine——Sentinel-5 Precursor 气体监测数据介绍(臭氧、甲烷、甲醛、气溶胶、一氧化碳、氮氧化物和二氧化硫浓度)
  9. 量子计算新进展:信息传输速度居然达到了光速的1.9倍
  10. R语言学习笔记︱Echarts与R的可视化包——地区地图