十大排序算法-----归并排序

2023-11-07

归并排序

原理:

归并排序是一种概念上最简单的排序算法,归并排序是基于分治法的。归并排序将待排序的元素序列分成两个长度相等的子序列,为每一个子序列排序,然后再将他们合并成一个子序列。合并两个子序列的过程也就是两路归并。

算法基本步骤

1,申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;

2,设定两个指针,最初位置分别为两个已经排序序列的起始位置;

3,比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;

4,重复步骤 3 直到某一指针达到序列尾;

5,将另一序列剩下的所有元素直接复制到合并序列尾。

public class merge_Sort {
	public static int[] sort (int[] a,int low,int high) {
		int mid = (low+high)/2;
        if(low<high){
            sort(a,low,mid);
            sort(a,mid+1,high);
            //左右归并
            merge(a,low,mid,high);
        }
        return a;
		
		
	}
	 public static void merge(int[] a, 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(a[i]<a[j]){
	                temp[k++] = a[i++];
	            }else{
	                temp[k++] = a[j++];
	            }
	        }
	        // 把左边剩余的数移入数组 
	        while(i<=mid){
	            temp[k++] = a[i++];
	        }
	        // 把右边边剩余的数移入数组
	        while(j<=high){
	            temp[k++] = a[j++];
	        }
	        // 把新数组中的数覆盖nums数组
	        for(int x=0;x<temp.length;x++){
	            a[x+low] = temp[x];
	        }
	    }
	 public static void main(String[] args) {
		 int[] arr = {6,5,3,1,8,7,2,4};
		 sort(arr, 0, arr.length-1);
		 System.out.println("排好序的数组:");
	        for (int e : arr)
	            System.out.print(e+" ");
	    }
	}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

十大排序算法-----归并排序 的相关文章

随机推荐

  • Flume 数据流监控——Ganglia的安装与部署

    1 Ganglia的安装 1 安装 dhttpd 服务与 php yasin hadoop102 flume sudo yum y install httpd php 2 安装其他依赖 atguigu hadoop102 flume sud
  • 用Windbg解决一个Bug

    摘要 可以看到无论对于开发还是测试人员 windbg很多时候可以帮我们快速的定位问题 如果借助符号文件 Windbg完全可以实现比VC IDE更强大的调试供功能 并且有时候我们不需要源代码 不需要重新编译 直接就可以通过windbg调试和解
  • 对称加密和非对称加密

    对称加密 什么是对称加密 对称加密就是指 加密和解密使用同一个密钥的加密方式 对称加密的工作过程 发送方使用密钥将明文数据加密成密文 然后发送出去 接收方收到密文后 使用同一个密钥将密文解密成明文读取 对称加密的优点 加密计算量小 速度块
  • llinux 开发环境环境配置

    1 安装好Ubuntu后 关闭软件中的更新及检测 2 安装vmware tool 不用sudo mount t vmhgfs host mnt hgfs 不用vmhgfs fuse host mnt hgfs命令挂载 只要在安装VMware
  • C++常用函数之sort函数,头文件 algorithm

    1 sort 函数是C 标准库中的排序函数 头文件为algorithm 2 sort 函数时间复杂度 我们最熟悉的冒泡排序和选择排序的时间复杂度过高o nn 不能满足我们写题的需要 sort函数的排序方法类似于快排方法 时间复杂度为nlog
  • 图示电路中的等效电阻rab_可调电阻即电位器,各种敏感电阻的介绍和使用(电阻二)...

    上一篇讲了固定阻值电阻器 这一篇主要讲可变电阻 和敏感电阻器 电位器是一种阻值可以通过调节而变化的电阻器 又称可变电阻器 电位器和图形符号 电位器结构示意图 电位器有A C B三个引出极 在A B极之间连接着一段电阻体 该电阻体的阻值用RA
  • ctfshow-网络迷踪-密集恐惧( 世界上最大的飞机墓地)

    ctf show 网络迷踪模块 密集恐惧关卡 这一关的图片给了一个很荒凉的地方 里面有很多飞机 看样子是荒废很久了 推荐使用百度识图获取具体的地点 在通过百度搜索得到具体的经纬度 将图片下载到本地 像是一个荒凉的农场 里面有很多飞机 很明显
  • 人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Alignment模块用于检测人脸关键点 包括5个点 两个眼的中心 鼻尖 两个嘴角 以下是测试代码 int test alignment std vector
  • QT关闭标题栏setWindowFlags不生效问题

    QT关闭标题栏setWindowFlags不生效问题 setWindowFlags不生效原因 主窗口使用该函数时可以正常关闭标题栏 但是当子窗口MyQDialog新建中使用到this时 并使用这个函数并不能正常闭关标题栏 问题在于这个thi
  • 常用的 c++ 函数汇总(持续更新)

    1 数组 列表类 1 列表初始化 vector
  • 2022年蓝队初级护网总结

    1 设备误报如何处理 答 来自外网的误报说明安全设备需要进行策略升级 不需要处置 如果是来自内网的误报可以和负责人协商一下看能不能解决 有必要的话添加白名单处理 2 如何区分扫描流量和手工流量 答 1 扫描流量数据量大 请求流量有规律可循且
  • 秒杀超卖 解决方案(史上最全)

    文章很长 建议收藏起来慢慢读 疯狂创客圈总目录 语雀版 总目录 码云版 总目录 博客园版 为您奉上珍贵的学习资源 免费赠送 经典图书 Java高并发核心编程 卷1 面试必备 大厂必备 涨薪必备 加尼恩免费领 免费赠送 经典图书 Java高并
  • mysql连接

    package com bochy jdbc import java sql Connection import java sql DriverManager author zhaoYuguang version 1 0 链接Mysql数据
  • 热更新_ToLua学习示例 05_LuaCoroutine

    Lua文件名字 这个是个 bytes后缀的文本 跟xlu里面用txt文件放lua代码一样外面拖拽赋值 public TextAsset luaFile null Lua状态 private LuaState lua null 这个类继承Mo
  • 【超详细】SSM框架项目实战

    相关资料网盘链接 CRM客户管理系统资料 提取码 0u04 P1 CRM阶段简介 web项目开发 如何分析 设计 编码 测试 形成编程思想和编程习惯 P2 CRM的技术架构 视图层 View 展示数据 跟用户交互 html css js j
  • Unity3d打开的时候,卡在loading界面白屏的解决方法

    本文首发于 洪流学堂 公众号 洪流学堂 让你快人几步 你好 我是你的技术探路者郑洪智 你可以叫我大智 vx zhz11235 Unity3d打开的时候 当遇见卡Loading的时候 可以看看Editor log C Users
  • 12.6 包的声明和访问

    包的概念 java的包 其实就是我们电脑系统中的文件夹 包里存放的是类文件 当类文件很多的时候 通常我们会采用多个包进行存放管理他们 这种方式称为分包管理 在项目中 我们将相同功能的类放到一个包中 方便管理 并且日常项目的分工也是以包作为边
  • 使用cmake工具多文件编译

    使用cmake工具多文件编译 创建CMakeLists txt project PEOPLE add executable my cmake people main cpp people cpp ctrl shift p 为了生成build
  • 多线程(七)线程池

    线程池 又是一个池 我们已经见识过很多池了 数据库连接池 字符串常量池 那我们这个线程池又是个啥呢 我们提前将线程准备好 需要用的时候直接取 不需要用的时候 在直接还回去 这样就不需要去从系统中申请了 这样做 最大的好处就是减少每次启动 销
  • 十大排序算法-----归并排序

    归并排序 原理 归并排序是一种概念上最简单的排序算法 归并排序是基于分治法的 归并排序将待排序的元素序列分成两个长度相等的子序列 为每一个子序列排序 然后再将他们合并成一个子序列 合并两个子序列的过程也就是两路归并 算法基本步骤 1 申请空