算法导论——2.3-2无哨兵情况下的归并排序
来源:互联网 发布:php登录页面完整代码 编辑:程序博客网 时间:2024/06/06 00:43
没有哨兵时,可以设置一个判断,只要2个分数组的一个到达底端就把另一个的后续元素赋给原数组。具体如下:
#include<iostream>using namespace std;const int sentry = 999999;void Merge(int ia[], size_t p, size_t q, size_t r){int a1[10], a2[10];size_t len1 = q - p + 1, len2 = r - q;for (int i = 0; i <len1; ++i)a1[i] = ia[p + i];//a1[len1] = sentry;for (int i = 0; i <len2; ++i)a2[i] = ia[q + i + 1];//a2[len2] = sentry;int b = 0, c = 0;for (int i = p; i <= r; ++i){if (b !=len1 && c !=len2) //只有在b没有到达len1且c没有到达len2时才会将小的值给ia{if (a1[b] >= a2[c])ia[i] = a2[c++];elseia[i] = a1[b++];}else { if (b == len1)//如果b取到len1,那就把a2数组一次赋给iafor (int j = c; j < len2; ++j)ia[i] = a2[j];if (c == len2)//如果c取到len2,那就把a1数组一次赋给iafor (int j = b; i < len1; ++j)ia[i] = a1[j];}}}void Merge_sort(int ia[], size_t p, size_t r){if (p < r){int q = (p + r) / 2;Merge_sort(ia, p, q);Merge_sort(ia, q + 1, r);Merge(ia, p, q, r);}}int main(){int a[20];int n;cout << "input the size of array:" << endl;cin >> n;for (int i = 0; i < n; ++i)cin >> a[i];//input arrayMerge_sort(a, 0, n - 1);for (int i = 0; i < n; ++i)cout << a[i] << " ";cout << endl;return 0;}
0 0
- 算法导论——2.3-2无哨兵情况下的归并排序
- 归并排序 (不采用哨兵) 算法导论2.3-2答案
- 算法导论2.3.2--归并排序
- 算法导论——归并排序
- 算法导论笔记——归并排序
- 算法导论例程——归并排序
- 算法导论——归并排序
- 归并排序——算法导论学习
- 算法导论—归并merge排序
- 算法导论2归并排序
- 【算法导论】归并排序
- [算法导论]归并排序
- 算法导论-----归并排序
- 【算法导论】归并排序
- 算法导论-归并排序
- 算法导论-归并排序
- 算法导论 归并排序
- 算法导论-归并排序
- C语言二叉树结构数组法
- 复选框checkbox 获取已选中的值
- 2016 工作、生活与得失
- mybatis 中 foreach collection的三种用法
- Verilog HDL 语言书写规范
- 算法导论——2.3-2无哨兵情况下的归并排序
- leetcode——2Add Two Numbers
- 手动将jar文件加到Maven的local repository中
- GIT 第一问 怎么删除github上的仓库
- php伪静态重写规则
- Swit轉場動畫的簡單分析
- clock()、time()、clock_gettime()和gettimeofday()函数的用法和区别
- 抽象类和虚基类的定义及用途
- limits 错误:宏“min”需要 2 个参数,但只给出了 1 个