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

本文共 1556 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    Objective-C实现Edmonds-Karp算法(附完整源码)
    查看>>
    Objective-C实现EEMD算法(附完整源码)
    查看>>
    Objective-C实现elgamal 密钥生成器算法(附完整源码)
    查看>>
    Objective-C实现EM算法(附完整源码)
    查看>>
    Objective-C实现EM算法(附完整源码)
    查看>>
    Objective-C实现entropy熵算法(附完整源码)
    查看>>
    Objective-C实现euclidean distance欧式距离算法(附完整源码)
    查看>>
    Objective-C实现Euclidean GCD欧几里得最大公约数算法(附完整源码)
    查看>>
    Objective-C实现euclideanDistance欧氏距离算法(附完整源码)
    查看>>
    Objective-C实现euler method欧拉法算法(附完整源码)
    查看>>
    Objective-C实现euler modified变形欧拉法算法(附完整源码)
    查看>>
    Objective-C实现eulerianPath欧拉路径算法(附完整源码)
    查看>>
    Objective-C实现Eulers TotientFunction欧拉函数算法(附完整源码)
    查看>>
    Objective-C实现eulers totient欧拉方程算法(附完整源码)
    查看>>
    Objective-C实现EulersTotient欧拉方程算法(附完整源码)
    查看>>
    Objective-C实现eval函数功能(附完整源码)
    查看>>
    Objective-C实现even_tree偶数树算法(附完整源码)
    查看>>
    Objective-C实现Exceeding words超词(差距是ascii码的距离) 算法(附完整源码)
    查看>>
    Objective-C实现exchange sort交换排序算法(附完整源码)
    查看>>
    Objective-C实现ExponentialSearch指数搜索算法(附完整源码)
    查看>>