归并排序
来源:互联网 发布:js的数据类型 编辑:程序博客网 时间:2024/06/05 00:29
#include <vector>using namespace std;template <typename Comparable>void mergeSort(vector<Comparable> & a){ vector<Comparable> tmpArray(a.size()); //存放归并结果的数组 mergeSort(a,tmpArray,0,a.size()-1); //子数组的最左和最右下标}template <typename Comparable>void mergeSort(vector<Comparable> & a,vector<Comparable> & tmpArray,int left,int right){ if (left<right) { int center=(left+right)/2; mergeSort(a,tmpArray, left, center); mergeSort(a, tmpArray, center+1, right); merge(a,tmpArray,left,center+1,right); }}template <typename Comparable>void merge(vector<Comparable> & a,vector<Comparable> & tmpArray, int leftPos,int rightPos,int rightEnd){ int leftEnd=rightPos-1; int tmpPos=leftPos; int numElements=rightEnd-leftPos+1; //将两数组中的较小者放入临时数组 while (leftPos<=leftEnd&&rightPos<=rightEnd) { if (a[leftPos]<=a[rightPos]) tmpArray[tmpPos++]=std::move(a[leftPos++]); else tmpArray[tmpPos++]=std::move(a[rightPos++]); } //一个数组用完了,则将另一个数组的剩余部分全部放入临时数组 while(leftPos<=leftEnd) tmpArray[tmpPos++]=std::move(a[leftPos++]); while(rightPos<=rightEnd) tmpArray[tmpPos++]=std::move(a[rightPos++]); //将临时数组复制回原始数组 for(int i=0;i<numElements;++i,--rightEnd) a[rightEnd]=std::move(tmpArray[rightEnd]);}
阅读全文
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 进程地址空间(Linux内核源码分析)
- PID应用于电机驱动系统中的简单讲解
- 关于8个基本数据类型及他们的封装类
- spring boot-application.properties配置文件属性
- Java I/O 工作机制
- 归并排序
- Android Wi-Fi wpa_supplicant 初始化流程图
- MFC中模态和非模态对话框
- opendss
- 文件上传下载解决乱码问题
- Angularjs中的$Http与$resource
- jq和js的区别
- Jquery Easyui验证组件ValidateBox使用详解
- 版本控制器---GitHub浅学