归并排序
来源:互联网 发布:商家给淘宝发票抬头 编辑:程序博客网 时间:2024/06/18 12:42
Mark Allen Weiss的数据结构预算法分析,思路很清晰,用C++实现
#include <iostream>
#include<vector>using namespace std;
class MS
{
public:
void mergesort(vector<int>&a,vector<int>&tmpArray,int left,int right);
void mergeSort(vector<int>&a);
void merge(vector<int>&a,vector<int>&tmpArray,int leftPos,int rightPos,int rightEnd);
};
void MS::mergeSort(vector<int>&a)
{
vector<int>tmpArray(a.size());
mergesort(a,tmpArray,0,a.size()-1);
};
void MS::mergesort(vector<int>&a,vector<int>&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);
}
};
void MS::merge(vector<int>&a,vector<int>&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++]=a[leftPos++];
else
tmpArray[tmpPos++]=a[rightPos++];
while(leftPos<=leftEnd)
tmpArray[tmpPos++]=a[leftPos++];
while(rightPos<=rightEnd)
tmpArray[tmpPos++]=a[rightPos++];
for(int i=0;i<numElements;i++,rightEnd--)
a[rightEnd]=tmpArray[rightEnd];
};
int main()
{
MS m;
vector<int> ivec;
ivec.push_back(1);
ivec.push_back(9);
ivec.push_back(2);
ivec.push_back(10);
ivec.push_back(3);
ivec.push_back(11);
ivec.push_back(4);
ivec.push_back(12);
ivec.push_back(5);
ivec.push_back(13);
ivec.push_back(6);
ivec.push_back(14);
for(int j=0;j<ivec.size();j++)
cout<<ivec[j]<<endl;
m.mergeSort(ivec);
return 0;
}
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 解决svn "cannot set LC_CTYPE locale"的问题
- discuz+mysql,数据库连接数过大
- Android RIL总体架构介绍
- Android Binder设计(二)
- 为QQ空间推广整理思路
- 归并排序
- 用法总结:NSNumber、NSString、NSDate、NSCalendarDate、NSData
- 大型数据库如何备份?怎样做最优的数据库备份方案 .
- Extjs4 在store中获取root之外的json数据
- 实模式和保护模式
- dede 按栏目分类搜索
- uboot之start.S源码分析
- Android 益智拼图游戏
- Python中的*args和**kwargs