当前位置: 首页 > news >正文

排序算法--归并排序

实现逻辑
① 将序列每相邻两个数字进行归并操作,形成floor(n/2)个序列,排序后每个序列包含两个元素
② 将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素
③ 重复步骤②,直到所有元素排序完毕

void print_array(int a[], int n){for (int i = 0; i < n; ++i){cout << a[i] << " ";}cout << endl;
}/************************************************************************
* 功能描述:二路归并排序(两个有序序列)
* 参	数:有序序列下标 f 第一个, s 第二个
* 日	期:2023/11/22                                                   
************************************************************************/
void merge(int arr[], int fBegin, int fEnd, int sBegin, int sEnd, int newArray[])
{int index = fBegin;//新数组的下标int f = fBegin;//遍历第一个有序序列int s = sBegin;//遍历第二个有序序列while (f <= fEnd && s <= sEnd){if (arr[f] <= arr[s]){newArray[index++] = arr[f++];}else{newArray[index++] = arr[s++];}}while (f <= fEnd){newArray[index++] = arr[f++];}while (s <= sEnd){newArray[index++] = arr[s++];}memcpy(arr + fBegin, newArray + fBegin, sizeof(int) *(sEnd - fBegin +1));
}//多路归并排序
void mergeSort(int arr[], int left, int right, int newArray[])
{if (left >= right){return;}int mid = (left + right) / 2;mergeSort(arr, left, mid, newArray);mergeSort(arr, mid + 1, right, newArray);merge(arr, left, mid, mid + 1, right, newArray);
}int main(){int arr[] = {10, 8, 11, 7, 4, 12, 9, 6, 5, 3};int len = sizeof(arr)/sizeof(arr[0]);int newArray[10] = {0};cout << "排序前:";print_array(arr, len);mergeSort(arr, 0, len - 1, newArray);cout << "排序后:";print_array(arr, len);return 0;
}

输出结果:
在这里插入图片描述

http://www.lryc.cn/news/241470.html

相关文章:

  • 【LeetCode:1410. HTML 实体解析器 | 模拟+哈希表+字符串+库函数】
  • 基于SSM的公司仓库管理系统(有报告)。Javaee项目
  • spark数据倾斜的解决思路
  • Python武器库开发-前端篇之html概述(二十八)
  • 安防视频EasyCVR平台太阳能供电+4G摄像头视频监控方案的建设
  • 12.位运算的性质(异或的性质)
  • 国标直流充电枪9孔分别啥意思?
  • 关于 Google AMP 和 SEO
  • 【SpringMVC】 对请求的不同响应
  • SQL进阶学习
  • 邦芒解析:做好职场规划防止跳槽失败
  • 基于springboot实现实习管理系统的设计与实现项目【项目源码+论文说明】计算机毕业设计
  • 【华为OD题库-031】比赛的冠亚季军-java
  • 电脑如何禁止截屏
  • 【Web】NewStarCTF Week1 个人复现
  • Android 提示框代码 java语言
  • 【c语言】二维数组的对角线对称交换
  • Sulfo-CY3 NHS荧光染料的制备和表征
  • 数字乡村:科技赋能农村产业升级
  • K8S部署mongodb-sharded-cluster(7.0.2)副本分片
  • Dockerfile-CentOS7.9+Python3.11.2
  • 自定义责任链Filter实现
  • NX二次开发UF_CSYS_create_matrix 函数介绍
  • css引入的三种方式
  • 含羞草研究所研究含羞草的代码
  • 常见立体几何图形的体积
  • vue3 + vue-router + keep-alive缓存页面
  • unigui同页面内重定向跳转,企业微信内部应用开发获取用户code例子
  • 垃圾数据啊
  • GB/T 29498-2013 木门窗检测