c++模板实现归并排序
来源:互联网 发布:网络直播的普及率 编辑:程序博客网 时间:2024/06/05 19:04
最近正在学习各种排序算法,今天实现了归并排序。先上代码:
#include "stdafx.h"#include <iostream>template<typename T>void Merge(T A[],const int& p,const int& q,const int& r) // p表示开始排序的位置,q是结束位置,r是断点{T *A_array_help = new T[r - p + 1]; //A_array_help,B_array_help是用来存储分割后的序列for(int i = 0;i < r - p + 1;i ++){A_array_help[i] = A[p + i];}//print<T>(b,5);T *B_array_help = new T[q - r];for(int i = 0;i < q - r;i ++){B_array_help[i] = A[r + i + 1];}//print<T>(c,5);int A_array_order = 0;int B_array_order = 0;for(int i = p;i <= q;i ++){if(A_array_order < r - p + 1 && B_array_order < q - r){if(A_array_help[A_array_order] < B_array_help[B_array_order])A[i] = A_array_help[A_array_order ++];elseA[ i] = B_array_help[B_array_order ++];}else{if(A_array_order < r - p + 1) A[i] = A_array_help[A_array_order ++];elseA[i] = B_array_help[B_array_order ++];}}delete [] A_array_help;delete [] B_array_help;}template<typename T>void Merge_Sort(T A[],int p,int q) //算法主体,实现分割和合并。{if(p < q){int r = (p + q) / 2;Merge_Sort(A,p,r);Merge_Sort(A,r+1,q);Merge(A,p,q,r);}}template<typename T>void print(T array_pointer[],const int& array_size){for(int i = 0;i < array_size;i ++){std::cout << array_pointer[i] << std::endl;}}
其原理很简单:将原数组一分为二,然后将有序数组归并,如此递归下去。代码已经写过测试用例测试过。忘大家指正
- c/c++之模板方法实现归并排序
- c++模板实现归并排序
- C++模板实现归并排序
- 归并排序 c语言实现
- 归并排序C语言实现
- 归并排序C语言实现
- 归并排序--C语言实现
- 归并排序C语言实现
- 归并排序--c语言实现
- C语言实现归并排序
- 归并排序 --C语言实现
- 排序(6)---------归并排序(C语言实现)
- 排序算法(C实现)-------- 归并排序
- 排序算法C++&&Python实现---归并排序
- 排序算法C++&&Python实现---归并排序
- c++ 模板实现 -- 直接插入排序和归并排序
- 归并排序模板
- C++归并排序模板
- java核心技术学习笔记1---基本概念
- LLVM每日谈之七 Clang
- 【应用赏析】ArcGIS API for iOS在俄勒冈大学校园中的创新应用
- Android Handler运行原理
- jackson json 转换Bean, Bean 里没有对应的值 jackson Unrecognized field
- c++模板实现归并排序
- win7访问2003共享文件夹
- 如何分析Email模块接收、发送邮件失败的Log
- GPS如何进入省电模式
- C#操作IIS
- SIP协议简介
- 【移动产品】ArcGIS Runtime SDK for iOS 2.2发布
- GPS打开失败
- 查询地点拾取坐标