C++STL之归并排序
发布时间:2020-12-16 07:47:16 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 /*******************************mergeSort******************************/#include "stdafx.h"#include vectorusing namespace std; template type
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 /****************************** *mergeSort ******************************/ #include "stdafx.h" #include <vector> using namespace std; template <typename T> void mergeSort(vector<T>& vec) { vector<T> tempVec(vec.size()); mergeSort(vec,tempVec,vec.size()- 1); } template <typename T> void mergeSort(vector<T>& vec,vector<T> tempVec,int left,int right) { if (left < right) { int center = (left + right)/2; mergeSort(vec,left,center); mergeSort(vec,center+1,right); mergeFunc(vec,right); //合并 } }; //合并函数 template <typename T> void mergeFunc(vector<T>& vec,int Pos,int right) { int leftPos = left; //左边序列的位置,初始为左序列起点 int leftEnd = Pos-1 ; //左边序列的终点 int rightPos = Pos; //右边序列的位置,初始为右序列起点 int rightEnd = right; //右边序列的终点 int tempPos = left; //临时数组的位置,初始为临时数组的起点 int numElements = right - left + 1; //数组元素的个数 //两段数组合并 //两段数组已有序 while (leftPos <= leftEnd && rightPos <= rightEnd) //左边数组和右边数组都没有到终点 { //比较左边数组和右边数组值的大小 //把较小者放入临时数组 if (vec[leftPos] <= vec[rightPos]) { tempVec[tempPos++] = vec[leftPos++]; } else tempVec[tempPos++] = vec[rightPos++]; } // 只剩一个序列时,直接复制到临时数组 while (leftPos <= leftEnd) { tempVec[tempPos++] = vec[leftPos++]; } while (rightPos <= rightEnd) { tempVec[tempPos++] = vec[rightPos++]; } //将临时数组的值复制回源数组 int i = 0; for (; i< numElements; i++,rightEnd--) //这里从后向前复制,因为前面有很多垃圾数据 { vec[rightEnd] = tempVec[rightEnd]; } } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |