归并排序算法详解及C++代码实现
创作时间:
作者:
@小白创作中心
归并排序算法详解及C++代码实现
引用
CSDN
1.
https://blog.csdn.net/Chenqin1879/article/details/140875935
归并排序是一种采用分治策略进行排序的算法,其核心思想是将一个大规模的问题分解为若干规模较小的相同子问题,然后逐个解决这些子问题,最后将结果合并。对于排序问题而言,这意味着将待排序的无序序列分解为两个规模大致相等的子序列,如果子序列仍然较大,则继续分解,直到每个子序列只包含一个元素(因为单个元素的序列本身就是有序的)。此时,就可以开始合并这些有序子序列,逐步构建出完整的有序序列。
以序列(42,15,20,6,8,38,50,12)为例,归并排序的过程如下图所示:
从上图可以看出,归并排序首先将待排序元素分成大小大致相同的两个子序列,然后将子序列继续分成更小的子序列,直到每个子序列只包含一个元素。接着,算法开始执行合并操作,将两个有序的子序列合并成一个有序序列,如此反复,直到所有元素都合并为一个完整的有序序列。
下面是归并排序的完整C++代码实现:
#include<bits/stdc++.h>
using namespace std;
// 合并两个有序子序列的函数
void merge(int A[], int low, int mid, int high) {
int *B = new int[high - low + 1]; // 申请一个动态数组进行辅助
int i = low, j = mid + 1, k = 0;
while (i <= mid && j <= high) { // 按从小到大的顺序放入辅助数组中
if (A[i] <= A[j])
B[k++] = A[i++];
else
B[k++] = A[j++];
}
while (i <= mid) B[k++] = A[i++]; // 将数组中剩下的元素放入辅助数组中
while (j <= high) B[k++] = A[j++];
for (i = low, k = 0; i <= high; i++, k++) { // 将排序好的辅助数组复制到原数组中
A[i] = B[k];
}
delete[] B; // 释放内存空间
}
// 分解序列并递归排序的函数
void mergeSort(int A[], int low, int high) {
if (low < high) {
int mid = (low + high) / 2; // 取中点
mergeSort(A, low, mid); // 对A[low:mid]中的元素合并排序
mergeSort(A, mid + 1, high); // 对A[mid+1:high]中的元素合并排序
merge(A, low, mid, high); // 合并
}
}
int main() {
int a[1005];
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
mergeSort(a, 0, n - 1); // 调用归并排序函数
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
}
这段代码首先定义了一个merge函数,用于合并两个有序子序列。然后定义了mergeSort函数,用于递归地将序列分解为更小的子序列,并最终调用merge函数进行合并。最后,在main函数中读取用户输入的序列,调用mergeSort函数进行排序,并输出排序后的结果。
热门推荐
深圳地铁12号线二期建设最新进展:预计2024年建成通车
华为手机如何清理app缓存数据库
用同理心拉近距离
上下屈服强度和规定塑性延伸强度及屈服强度的测试方法
磁粉检测(MT)是什么?原理、应用及优缺点全解析
Switch 2 会卖多少钱?让我们分析一下任天堂的定价策略吧
风洞实验运动装置机械结构设计详解
一文彻底搞懂Transformer - Training(模型训练)
公费师范生毕业后怎么分配?六年后调动还有编制吗?
金融市场中的对冲基金:运作原理与投资策略
是绣球?还是荚蒾?看完你就知道怎么分!
液相色谱分析中内标法的优化策略与实践指南
解析养老保险提取规则及其法律依据
塔罗牌圣杯王后(正位/逆位)详细的意思_爱情,事业,学业,人际关系
SEO关键词扩展、归类和内容布局方法
60岁以上死亡赔偿金计算标准详解
做气管镜检查,你准备好了吗?
高分子材料生物降解材料专利的创新现状与未来发展趋势探讨
夏季用啤酒开饵,会有意想不到的效果
酸性体质真的会影响生女儿吗?科学解读来了
反物质:从科幻到现实——深入探索物理学前沿
五行缺火从事工作好吗?解析五行缺火适合的职业
【GraphRAG】构建知识图谱:从技术到实战的完整指南
《绝区零》平民玩家福音:星见雅无伤通关3W8关卡攻略详解
如何办好职业本科教育?深圳职业技术大学未来技术学院探索人才培养新模式
深圳产教深度融合实现三方共赢
乱砍树案件:环境保护与法律责任的深度审视
甲醛VOC测试箱中的传感器有哪些?
眼镜片加了散光会变厚吗?
夏季背部总是长痘痘?这份专业护肤指南请收好