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;}}


其原理很简单:将原数组一分为二,然后将有序数组归并,如此递归下去。代码已经写过测试用例测试过。忘大家指正