排序之归并排序

在计算机科学中,排序是一种常见的操作。它用于将一组元素按照一定的顺序排列。归并排序是一种非常有效的排序算法,其时间复杂度为O(nlogn),空间复杂度为O(n)。本文将详细介绍归并排序的工作原理和实现方法。

归并排序的工作原理

归并排序的基本思想是将待排序的序列分成两个子序列,对每个子序列进行排序,然后将排序后的子序列合并成一个有序序列。这个过程可以递归地进行,直到整个序列被排序。

具体来说,归并排序的步骤如下:

  1. 将待排序的序列分成两个子序列,每个子序列的长度大致相等(如果长度不等,可以通过移动元素来调整)。
  2. 对每个子序列进行排序。这里可以使用任何比较排序算法,例如快速排序、堆排序等。
  3. 将排序后的子序列合并成一个有序序列。这里可以使用归并操作,即将两个已排序的子序列合并成一个有序序列。
  4. 如果需要,重复步骤2和3,直到整个序列被排序。

动画展示

归并排序的Java实现

下面是归并排序的Java实现:

import java.util.Arrays;
//归并排序
public class MergeSort {public static void main(String[] args) {int[] arr = {5,7,4,2,0,3,1,6};split(arr, 0, arr.length-1);System.out.println(Arrays.toString(arr));}//拆分public static void split(int[] arr,int left,int right) {//判断left和right是否指向同一块区域if(left == right) {return;}int i = (left+right)/2;//左半部分split(arr, left, i);//右半部分split(arr, i+1, right);//合并merge(arr, left, right, i);}//合并public static void merge(int[] arr,int left,int right,int mid) {int s1 = left;int s2 = mid+1;int[] temp = new int[right-left+1];//定义临时数组int index = 0;//定义临时数组下标while(s1<=mid && s2<=right) {if(arr[s1]<arr[s2]) {temp[index] = arr[s1];index++;s1++;}else {temp[index] = arr[s2];index++;s2++;}}//判断s1中是否还有数据,如果有数据将其全部放入临时数组while(s1<=mid) {temp[index] = arr[s1];index++;s1++;}//判断s2中是否还有数据,如果有数据将其全部放入临时数组while(s2<=right) {temp[index] = arr[s2];index++;s2++;}//将临时数组当中的数据写回原数组for(int j=0;j<temp.length;j++) {arr[j+left] = temp[j];}	}}

总结

归并排序是一种高效的排序算法,其时间复杂度为O(nlogn),空间复杂度为O(n)。通过将待排序的序列分成两个子序列,对每个子序列进行排序,然后将排序后的子序列合并成一个有序序列,可以实现对任意长度的序列进行排序。本文介绍了归并排序的基本原理和Java实现,希望对你有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧之光:ChatGPT 引领工作效率新纪元

随着科技的不断发展&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐融入我们的日常生活和工作中。其中&#xff0c;ChatGPT 作为一种先进的 AI 技术&#xff0c;正逐步改变我们的工作方式&#xff0c;提升我们的工作效率。本文灸哥将介绍如何利用ChatGPT提升工作效率&…

Pytest插件pytest-django让Django测试更高效

在Django应用开发中&#xff0c;测试是确保应用质量的关键环节。然而&#xff0c;Django自带的测试框架并非总能满足开发者的需求&#xff0c;而Pytest插件 pytest-django 则为我们提供了更为灵活、强大的测试工具。本文将深入介绍 pytest-django 插件的基本用法和实际案例&…

后面的输入框与前面的联动,输入框只能输入正数(不用正则)

概要 提示&#xff1a;这里可以描述概要 前面的输入框是发票金额&#xff0c;后面的输入框是累计发票金额&#xff08;含本次&#xff09;--含本次就代表后倾请求的接口的数据&#xff08;不是保存后返显的-因为保存后返显的是含本次&#xff09;是不含本次的所以在输入发票金…

Linux基础命令[1]-ls

文章目录 1. ls 命令说明2. ls 常用命令参数2.1 -l&#xff08;展示详细信息&#xff09;2.2 -a/-A&#xff08;展示隐藏文件&#xff09;2.3 -t/-c/-r&#xff08;展示信息排序&#xff09;2.4 -h&#xff08;展示文件大小&#xff09;2.5 -R&#xff08;递归展示&#xff09;…

iphone5s基带部分电源部分主主电源供电及

时序: 1.,基带电源的供电&#xff0c;基带电源也叫pmu。 首先时序图说电池提供供电&#xff0c;电池是J6接口&#xff0c;视频习惯把接口称之为座子。查U2_RF芯片&#xff0c;发现供电信号为PP_BATT_VCC_CONN&#xff0c;但是没查到跟电池座子有关系&#xff0c;电池座子写的是…

E. Increasing Subsequences -思维构造

题面 分析 如果构造一个递增序列&#xff0c;如 1 , 2 , 3 , 4 , . . . 1,2,3,4,... 1,2,3,4,... &#xff0c;可以发现是存在一定规律的&#xff0c;一一列举。 1 —— 有两个上升子序列&#xff08;1和空序列)。1,2 —— 有四个上升子序列&#xff08;空序列&#xff0c;…

linux C语言socket函数recv

recv 函数是在 Linux C 语言网络编程中用于从已连接的套接字接收数据的函数。它通常与 TCP 连接一起使用&#xff0c;但也可以用于 UDP&#xff08;尽管对于 UDP&#xff0c;更常使用 recvfrom&#xff0c;因为它还可以接收发送方的地址信息&#xff09;。 函数原型 recv 函数…

SpringMVC基础知识学习笔记

Universe Infinity Inc. 目录 一、学习SpringMVC主要是学什么1、SpringMVC的基本原理2、SpringMVC学习串联 二、快速体验SpringMVC的开发1、新建项目&#xff0c;转成web项目2、引入依赖3、编写Spring的配置类4、配置web启动类&#xff0c;替代web.xml5、编写Handler&#xff…

第十二篇【传奇开心果系列】Ant Design Mobile of React开发移动应用:内置组件实现酷炫CSS 动画

Ant Design Mobile of React 开发移动应用示例博文系列 第一篇【传奇开心果系列】Ant Design Mobile of React 开发移动应用:从helloworld开始 第二篇【传奇开心果系列】Ant Design Mobile of React 开发移动应用:天气应用 第三篇【传奇开心果系列】Ant Design Mobile of Reac…

Java 如何使用单例类

单例的目的是控制对象的创建&#xff0c;将对象的数量限制为只有一个。由于只有一个单例实例&#xff0c;单例的实例字段将只会在每个类中出现一次&#xff0c;就像静态字段一样。单例通常控制对资源的访问&#xff0c;比如数据库连接或套接字。 例如&#xff0c;如果您只有一…

beego的模块篇 - I18n国际化

1. i18n 安装导入 安装该模块&#xff1a; go get github.com/beego/i18n 导入引用包&#xff1a; import ("github.com/beego/i18n" ) conf 目录下就有 locale_en-US.ini 和 locale_zh-CN.ini 两个本地化文件。 本地化文件的文件名和后缀是随意的&#xff0c;不…

MySQL 索引(上)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL-进阶篇 &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现…

libpcap简明教程

文章目录 前言tcpdump的使用libpcap API的简单使用libpcap API的进阶使用 前言 因为之前简单写过wireshark入门指北&#xff0c;所以我知道基本的抓包流程。最近尝试调用libpcap的C API接口&#xff0c;顺道整理下。 本文实验如下&#xff1a; 使用tcpdump命令抓取目标地址为…

【漏洞复现】Hikvision SPON IP网络对讲广播系统命令执行漏洞(CVE-2023-6895)

文章目录 前言声明一、系统简介二、漏洞描述三、影响版本四、漏洞复现五、修复建议 前言 Hikvision Intercom Broadcasting System是中国海康威视&#xff08;Hikvision&#xff09;公司的一个对讲广播系统。 声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播…

[已解决]前端使用el-upload,后端使用文件上传阿里云报错:异常信息:java.lang.NullPointerException: null

前端使用el-upload&#xff0c;后端使用文件上传阿里云报错&#xff1a; 报错原因&#xff1a;前端image参数未传进去 解决方法&#xff1a;在el-upload添加属性 name"image" 文件传进去了&#xff01;

回溯法:0-1背包问题

问题描述 给定种物品和一背包。 物品的重量是&#xff0c; 其价值为&#xff0c;背包的容量为 c。 问应该如何选择装入背包中的物品&#xff0c;使得装入背包中物品的总价值最大&#xff1f;注意物品不重复! 实例&#xff1a;物品价值V{12, 11, 9, 8}, 物品重量W{8, 6, 4, 3},…

手写Vue3源码

Vue3核心源码 B站视频地址&#xff1a;https://www.bilibili.com/video/BV1nW4y147Pd?p2&vd_source36bacfbaa95ea7a433650dab3f7fa0ae Monorepo介绍 Monorepo 是管理项目代码的一种方式&#xff0c;只在一个仓库中管理多个模块/包 一个仓库可以维护多个模块&#xff0c;…

Java API集合(2)

1.时间日期类 1.1 Date类&#xff08;应用&#xff09; 计算机中时间原点 1970年1月1日 00:00:00 时间换算单位 1秒 1000毫秒 Date类概述 Date 代表了一个特定的时间&#xff0c;精确到毫秒 Date类构造方法 方法名说明public Date()分配一个 Date对象&#xff0c;并初始化…

Fog-Aware Adaptive YOLO for Object Detection in Adverse Weather

Abstract 提出了一种雾自适应YOLO算法。使用一种雾评估算法将图片分为有雾和无雾图片&#xff0c;随后将标准的YOLO应用于正常图片&#xff0c;自适应YOLO应用于有雾图片。 Method 目前的除雾方法去除雾霾时不考虑其雾度和发生频率。例如&#xff0c;图像自适应YOLO算法[6]试…

大数据小白初探HDFS从零到入门(一)

目录 1. 前言 2. 大数据的诞生 3.发展趋势及应用 4.离线计算和实时计算 5.大数据的特性 1. 前言 前两天把Hbase的初级入门知识整理了下,在文章中提到了“HDFS”这个大数据的基础,有同事小伙伴想要了解下这方面的知识,今天我把之前整理的内容也给同事讲了下,顺便我把他…