下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。
内存溢出小编现在分享给大家,也给大家做个参考。
/*******************************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]; }}
以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
总结以上是内存溢出为你收集整理的C++STL之归并排序全部内容,希望文章能够帮你解决C++STL之归并排序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)