归并排序算法详解及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
函数进行排序,并输出排序后的结果。
热门推荐
认罪与宽恕 忏悔与谅解——走进卢旺达的“团结和解村”
如何查询限高令取消了没
VR在航空培训中的应用:模拟飞行和应急操作
地理冷知识——青海西宁
蔡司视特耐和a系列哪个好?蔡司视特耐和a系列详细比较!
德国蔡司视特耐镜片比依视路镜片好吗?镜片性能与技术特点多元化分析,速查!
教师遇到抑郁症学生怎么办
如何做软件模拟测试工作
异地怎么办理结婚证
什么是特殊教育
如何通过心理训练提升自信心?
房产交易中个人所得税如何计算?一文详解计算方法和税率
继承房产再出售个税是20%还是1%?税务筹划建议+卖房注意事项
app是什么?深入解析移动应用的核心概念与功能
开国元首与末代皇帝的合影!
开国元首与末代皇帝的合影!
一文读懂2024年更适合贷款买车还是全款买车?
乌帕替尼可以用医保吗
地球自转的地理意义 会产生哪些地理现象
皮蛋热量:与米饭鸡蛋对比,食用注意事项全解析
绿化苗木种植过程种常用肥料及施肥方法
香蕉为什么能润肠通便的原理
产品经理如何写好文章呢
公司经营法人借款合法吗
汽油车加柴油会导致什么后果
颈动脉斑块出现这4种情况尽早处理!
“姿势不对,起来重睡”:中医带你躺赢人生!
如何撰写论文大纲:步骤、技巧与实例
他们真的在吃吗?——养老院中的营养不良问题
工程施工合同成本结转的法律问题解析与实务操作