【数据结构算法】归并排序

news/2024/11/13 2:59:21/

归并排序时间里在归并操作上的一种

归并排序(Merge Sort)是建立在归并操作上的一种高效排序算法。该算法是分治法(Divide and Conquer)的典型应用。归并排序的核心思想是将已有序的子序列合并,得到完全有序的序列。

归并排序的基本步骤如下:

  1. 分解:将待排序序列分成若干个子序列。
  2. 排序:对每个子序列进行排序。
  3. 合并:将已排序的子序列合并成一个完整的有序序列。

其中,将两个有序表合并成一个有序表的过程称为二路归并。

效果图:
在这里插入图片描述

回放步骤:

分解:

二分用递归_MergeSort(结束条件:lefd≥right)分到只有一个元素为止
在这里插入图片描述

递归左区间,递归右区间

begin1:每个区间开始

end1:每个左区间结束

begin2:每个右区间开始

end2:每个右区间结束

tmp和原数组一样大

mid=(left+right)/2

在这里插入图片描述
在这里插入图片描述

合并:合并时,重新创建一个数组数组,下标index,二分完之后,将排序完的元素放到临时数组内,然后拷贝到原数组

  • 先调顺序在合并,放回的时候根据下标区间放回合并,左区间【 left,mid】右区间【mid+1,right】

在这里插入图片描述

  • 合并完之后,向上回溯,继续排序,两个有序数组合并

  • 循环,递归结束。

  • 注意,递归到底之后,先排序,在回溯,回溯也可以认为是合并,下面可以表示总体的排序

代码

void  _MergeSort(int* arr, int left,int right,int *tmp)
{if (left>=right){return;//结束条件}int mid = (left + right) / 2;//[left,mid][mid+1,right]_MergeSort(arr, left, mid, tmp);//不断的进行二分_MergeSort(arr, mid+1, right, tmp);//一直二分到左区间的叶子结点,在回溯到父节点,才会执行右节点//合并int begin1 = left,end1 = mid;int begin2 = mid + 1, end2 = right;int index = begin1;while (begin1 < end1 && begin2 < end2){if (arr[begin1] < arr[begin2]){tmp[index++] = arr[begin1++];}else{tmp[index++] = arr[begin2++];}}while (begin1 <= end1){tmp[index++] = arr[begin1++];}while (begin2 <= end2){tmp[index++] = arr[begin2];}//把tmp中的数据拷贝到arr中for (int i = left; i < right; i++){arr[i] = tmp[i];}}
int MergeSort(int* arr, int n)
{int* tmp = (int*)malloc(sizeof(int));_MergeSort(arr, 0, n - 1, tmp);free(tmp);}

http://www.ppmy.cn/news/1546010.html

相关文章

pycharm 使用

前期配置 1、检查 Python 安装路径&#xff1a; 确保 E:\tools\Pyn392_EN_x64\python.exe 是你正确的 Python 安装路径。你可以在终端或命令提示符中运行这个命令&#xff0c;确保能正常找到Python。 E:\tools\Pyn392_EN_x64\python.exe --version2、检查 pip 是否正确安装&…

京津冀自动驾驶技术行业盛会|2025北京自动驾驶技术展会

“自动驾驶技术”已经成为全球汽车产业的焦点之一。在这个充满创新与变革的时代&#xff0c;“2025北京国际自动驾驶技术展览会”拟定于6月份在北京亦创国际会展中心盛大开幕&#xff0c;为全球自动驾驶技术领域的专业人士、企业以及爱好者们提供了一个交流与展示的平台。作为一…

FPGA实现串口升级及MultiBoot(五)通过约束脚本添加IPROG实例

本文目录索引 一个指令和三种方式通过约束脚本添加Golden位流工程MultiBoot位流工程验证example1总结代码缩略词索引: K7:Kintex 7V7:Vertex 7A7:Artix 7MB:MicroBlaze上一篇文章种总结了MultiBoot 关键技术,分为:一个指令、二种位流、三种方式、四样错误。针对以上四句话我…

股票量化实时行情接口WebSocket接入Python封装

Python做量化&#xff0c;如果是日内策略&#xff0c;需要更实时的行情数据&#xff0c;不然策略滑点太大&#xff0c;容易跑偏结果。 之前用行情网站提供的level1行情接口&#xff0c;实测平均更新延迟达到了6秒&#xff0c;超过10只股票并发请求频率过快很容易封IP。后面又尝…

漫谈分布式唯一ID

文章目录 本系列前言UUIDDB自增主键Redis incr命令号段模式雪花算法 本系列 漫谈分布式唯一ID&#xff08;本文&#xff09;分布式唯一ID生成&#xff08;二&#xff09;&#xff1a;leaf分布式唯一ID生成&#xff08;三&#xff09;&#xff1a;uid-generator分布式唯一ID生成…

解析Eureka的架构

1. 引言 1.1 Eureka的定义与背景 Eureka是由Netflix开发的一个RESTful服务&#xff0c;用于服务发现。它是微服务架构中的一个核心组件&#xff0c;主要用于管理服务的注册和发现。Eureka允许服务提供者注册自己的服务信息&#xff0c;同时也允许服务消费者查询可用的服务&am…

数据结构之排序--选择排序详解

选择排序 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完 。 直接选择排序: 在元素集合 array[i]--array[n-1] 中选择关键码最大 ( 小 ) 的数据元素 若它不是这组元…

React native Text Webview 处理字体大小的变化

If the user has set a custom font size in the Android system, an undesirable scale of the site interface in WebView occurs. 如果用户在Android系统中设置了自定义字体大小&#xff0c;会导致WebView中的站点界面出现不良比例 When setting the standard textZoom (100…