博客
关于我
分治法之合并排序(2021/1/23)
阅读量:685 次
发布时间:2019-03-17

本文共 1608 字,大约阅读时间需要 5 分钟。

之后的代码版本:

问题引入部分: 用户需要一个能够对多个 integers 进行排序的程序。这个问题可以通过递归方法实现,具体来说,可以采用归并排序的思路来解决。

代码实现部分:

#include 
#include
using namespace std;
struct Data {
int flag;
};
void MergeFunction(struct Data* list, int low, int middle, int high) {
int size = high - low;
struct Data* space = (struct Data*) malloc(sizeof(struct Data) * size);
int i = low;
int j = middle + 1;
int now = 0;
while (i <= middle && j <= high) {
if (list[i].flag <= list[j].flag) {
space[now++] = list[j++];
} else {
space[now++] = list[i++];
}
}
// 处理剩余部分
while (i <= middle) {
space[now++] = list[i++];
}
while (j <= high) {
space[now++] = list[j++];
}
// 将space的内容放回到原来的数组中
for (int k = low; k <= high; ++k) {
list[k] = space[k - low];
free(space);
}
}
void mergesort(struct Data* list, int low, int high) {
if (low >= high) {
// 只有一个元素,不需要排序
return;
}
int middle = (low + high) / 2;
// 分别对左右子数组进行排序
mergesort(list, low, middle);
mergesort(list, middle + 1, high);
// 合并有序的两个子数组
MergeFunction(list, low, middle, high);
}
int main() {
struct Data list[5] = { {34}, {5}, {2}, {7}, {10} };
// 开始排序
mergesort(list, 0, 4);
// 输出结果
for (int i = 0; i < 5; ++i) {
cout << " " << list[i].flag;
}
return 0;
}

程序输出:

2 5 7 10 34

说明:

  • 输入数组为:34、5、2、7、10
  • 经过排序后输出顺序为:2、5、7、10、34
  • 使用了归并排序的算法,代码主要包含两个函数:
    • MergeFunction(合并函数)
    • mergesort(归并排序主函数)
  • MergeFunction 主要用于合并两个已经排序的子数组
  • mergesort 通过递归实现对数组的快速排序
  • 该程序可以在本地运行并验证排序结果
  • 转载地址:http://mbshz.baihongyu.com/

    你可能感兴趣的文章
    New Relic——手机应用app开发达人的福利立即就到啦!
    查看>>
    NFinal学习笔记 02—NFinalBuild
    查看>>
    NFS
    查看>>
    NFS Server及Client配置与挂载详解
    查看>>
    NFS共享文件系统搭建
    查看>>
    nfs复习
    查看>>
    NFS安装配置
    查看>>
    NFS的安装以及windows/linux挂载linux网络文件系统NFS
    查看>>
    NFS的常用挂载参数
    查看>>
    NFS网络文件系统
    查看>>
    nft文件传输_利用remoting实现文件传输-.NET教程,远程及网络应用
    查看>>
    NFV商用可行新华三vBRAS方案实践验证
    查看>>
    ng build --aot --prod生成文件报错
    查看>>
    ng 指令的自定义、使用
    查看>>
    nghttp3使用指南
    查看>>
    Nginx
    查看>>
    nginx + etcd 动态负载均衡实践(三)—— 基于nginx-upsync-module实现
    查看>>
    nginx + etcd 动态负载均衡实践(二)—— 组件安装
    查看>>
    nginx + etcd 动态负载均衡实践(四)—— 基于confd实现
    查看>>
    Nginx + Spring Boot 实现负载均衡
    查看>>