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

devtools/2024/9/23 10:42:35/

归并排序目录

  • 一.归并排序的原理
  • 二.有序的归并实现
  • 三.无序的归并实现(分治法)
  • 四.归并排序的实现
  • 五.完整代码

一.归并排序的原理

在这里插入图片描述
如何将这两个数组排序?
在这里插入图片描述

二.有序的归并实现

将一个数组分为两段,那边的值小就加入到新数组中,直到一边已经加完了.
在这里插入图片描述
有一种情况就是一边已经加入完了,但是还有一边还有没有加入的,所以我们需要添加进数组,最后在拷贝到原数组.

在这里插入图片描述

三.无序的归并实现(分治法)

我们也已经注意到了,上面的是有序的两端合并排序,那如果无序的呢?
我们可以拆分为有序的,就是一直拆为只有1个元素,1个元素必定有序,然后可以采用归并.

四.归并排序的实现

在这里插入图片描述

在这里插入图片描述

五.完整代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>void mergeAdd(int arr[], int left, int mid, int right,int *temp)
{int i = left;   //指向左边数组最小的元素位置int j = mid;    //指向右边数组最小的元素位置int k = left;   //临时数组的下标while (i < mid && j <= right){if (arr[i] < arr[j]){temp[k++] = arr[i++];}else{temp[k++] = arr[j++];}}while (i < mid){temp[k++] = arr[i++];}while (j <= right){temp[k++] = arr[j++];}//把temp中的内容拷贝到arr数组中memcpy(arr + left, temp+left, sizeof(int) * (right - left + 1));
}void mergeSort(int arr[], int left, int right, int* temp)
{int mid = 0;if (left < right){mid = left + (right - left) / 2;//数据太大时可以防止溢出mergeSort(arr, left, mid, temp);mergeSort(arr, mid + 1, right, temp);mergeAdd(arr, left, mid+1, right, temp);}
}int main()
{int beauties[] = { 5,1,3,6,4,2,8,7 };int len = sizeof(beauties) / sizeof(beauties[0]);int* temp = new int[len];int mid = len / 2;mergeSort(beauties, 0, len - 1, temp);printf("执行归并大法:\n");for (int i = 0; i < len; i++){printf("%d ", beauties[i]);}system("pause");return 0;
}

运行结果:
在这里插入图片描述

2024年8月19日16:10:18
递归真特么烦!去™的.


http://www.ppmy.cn/devtools/96803.html

相关文章

MySQL——单表查询(一)简单查询(2)查询所有字段

查询所有字段是指查询表中所有字段的数据&#xff0c;MySQL中有两种方式可以查询表中所有字段&#xff0c;接下来将针对这两种方式进行详细的讲解。 1、在 SELECT 语句中指定所有字段 在 SELECT 语句中列出所有字段名来查询表中的数据&#xff0c;其语法格式如下: SELECT 字段…

机器学习第十四章-概率图模型

目录 14.1 隐马尔可夫模型 14.2马尔科夫随机场 14.3条件随机场 14.4学习与推断 14.4.1变量消去 14.4.2信念传播 14.5近似推断 14.5.1 MCMC采样 14.5.2 变分推断 14.6 话题模型 14.1 隐马尔可夫模型 概率围棋型是一类用图来表达变量相关关系的概率模型.它以图为表示工具…

高射炮打蚊子,“激光制导“还真的是实用

夏日炎炎&#xff0c;除了高温和烈日&#xff0c;最让人头疼的莫过于那些嗡嗡作响的蚊子。它们不仅扰人清梦&#xff0c;还可能携带疾病。传统的灭蚊方法&#xff0c;如电蚊拍、蚊香、驱蚊液等&#xff0c;虽然有效&#xff0c;但总有不尽人意之处。而今&#xff0c;随着科技的…

Apache CloudStack Official Document 翻译节选(三)

关于 Apache CloudStack 的 概念和专用术语 &#xff08;三&#xff09; About Pods 豆荚舱通常代表着一个单独的机柜&#xff0c;同一个豆荚舱中的宿主机处于同一个分支网络中。在部署Apache CloudStack时豆荚舱是第三大的资源管理单位。豆荚舱隶属于专职地带&#xff0c;每一…

postgresql常用快捷命令

1. 查看帮助信息 通过此命令查看数据库命令帮助信息&#xff0c;本文中的所有命令都可以在帮助命令列表找到 命令格式&#xff1a;? 示例&#xff1a; \?2. 查看所有数据库 命令格式&#xff1a;\l 示例&#xff1a; \l3. 切换数据库 命令格式&#xff1a;\c 数据库名…

C#与C++互操作

一、C#调用C库 1、创建C库 打开VisualStudio&#xff0c;创建一个C工程&#xff0c;输入项目名称HelloWorldLib 确定&#xff0c;然后下一步。选择应用程序类型为DLL 单击完成&#xff0c;我们就创建好了一个C库的项目。 这里为了方便&#xff0c;我们直接在HelloWorldLib.cp…

冰岛数据中心技术三巨头推出由可再生能源驱动的一体化云计算解决方案

冰岛通过国内生产的各种形式的可再生能源来满足其大部分能源需求。据三家开发新数据中心服务的公司称&#xff0c;这个北欧岛国也是关键任务云应用的理想环境。 Vespertec 公司、Sardina Systems 公司和 Borealis 公司共同开发了一种创新的 IT 解决方案&#xff0c;名为冰云综合…

浅谈Winform

一、Winform简介说明 C# 是一种面向对象的编程语言&#xff0c;由微软开发并作为.NET框架的主要编程语言。C# 设计时考虑了易用性&#xff0c;并且具有丰富的特性&#xff0c;如垃圾回收、异常处理、泛型、LINQ&#xff08;Language Integrated Query&#xff09;、异步编程等。…