#include "StdAfx.h"
#include "MergeSort.h"
typedef vector<int> IntDefVector;
MergeSort::MergeSort(void)
{
}
MergeSort::~MergeSort(void)
{
}
void MergeSort::MergeSort_Ini(std::vector<int> _Int_Vector, int _Vector_Size)
{
MergeSort::List_Vector.push_back(0);
MergeSort::Link_Vector.push_back(0);
for(int i=0;i<_Vector_Size;i++)
{
List_Vector.push_back(_Int_Vector[i]);
Link_Vector.push_back(0);
}
List_Vector_Size=_Vector_Size;
}
int MergeSort::MergeSort_List_Merge(int st1, int st2)
{
int k=0,i=st1,j=st2;
while(i&&j)
if(List_Vector[i]<=List_Vector[j])
{
Link_Vector[k]=i;
k=i;
i=Link_Vector[i];
}
else
{
Link_Vector[k]=j;
k=j;
j=Link_Vector[j];
}
if(!i)Link_Vector[k]=j;
else Link_Vector[k]=i;
return Link_Vector[0];
}
int MergeSort::MergeSort_Sort(int left,int right)
{
if(left>=right) return left;
int middle=(left+right)/2;
return MergeSort_Sort(MergeSort_List_Merge(left,middle),MergeSort_List_Merge(middle+1,right));
}
vector<int> MergeSort::MergeSort_Split(vector<int> _Int_Vector,int _Vector_Size)
{
IntDefVector VectorLeft;
IntDefVector VectorRight;
IntDefVector VectorResult;
//取中间下标
int Middle=_Vector_Size/2;
//如果数组只有一个元素,直接返回,无需排序
if(_Vector_Size<=1)
return _Int_Vector;
for(int k=0;k<_Vector_Size;k++)
{
if(k<Middle)
{
VectorLeft.push_back(_Int_Vector[k]);
}
else
{
VectorRight.push_back(_Int_Vector[k]);
}
}
//递归拆分左数组
VectorLeft=MergeSort_Split(VectorLeft,VectorLeft.size());
//递归拆分右数组
VectorRight=MergeSort_Split(VectorRight,VectorRight.size());
///排序并合并
VectorResult=MergeSort_Merge(VectorLeft,VectorLeft.size(),VectorRight,VectorRight.size());
return VectorResult;
}
vector<int> MergeSort::MergeSort_Merge(std::vector<int> _Int_Vector_left, int _Int_Vector_left_Len,
std::vector<int> _Int_Vector_Right, int _Int_Vector_Right_Len)
{
IntDefVector VectorResult;
int i=0,j=0;
while(i<_Int_Vector_left_Len && j<_Int_Vector_Right_Len)
{
if(_Int_Vector_left[i]<_Int_Vector_Right[j])
//将小的赋值到结果
VectorResult.push_back(_Int_Vector_left[i++]);
else
//将小的赋值到结果
VectorResult.push_back(_Int_Vector_Right[j++]);
}
while(i<_Int_Vector_left_Len)
{
//将最后一个元素赋值到结果
VectorResult.push_back(_Int_Vector_left[i++]);
}
while(j<_Int_Vector_Right_Len)
{
//将最后一个元素赋值到结果
VectorResult.push_back(_Int_Vector_Right[j++]);
}
return VectorResult;
}
void MergeSort::MergeSort_Output()
{
int i=Link_Vector[0];
int j=0;
while(i)
{
j++;
cout<<List_Vector[i]<<" ";
i=Link_Vector[i];
if(i>5&&i%10==0)
cout<<endl;
}
cout<<endl;
}
#include "MergeSort.h"
typedef vector<int> IntDefVector;
MergeSort::MergeSort(void)
{
}
MergeSort::~MergeSort(void)
{
}
void MergeSort::MergeSort_Ini(std::vector<int> _Int_Vector, int _Vector_Size)
{
MergeSort::List_Vector.push_back(0);
MergeSort::Link_Vector.push_back(0);
for(int i=0;i<_Vector_Size;i++)
{
List_Vector.push_back(_Int_Vector[i]);
Link_Vector.push_back(0);
}
List_Vector_Size=_Vector_Size;
}
int MergeSort::MergeSort_List_Merge(int st1, int st2)
{
int k=0,i=st1,j=st2;
while(i&&j)
if(List_Vector[i]<=List_Vector[j])
{
Link_Vector[k]=i;
k=i;
i=Link_Vector[i];
}
else
{
Link_Vector[k]=j;
k=j;
j=Link_Vector[j];
}
if(!i)Link_Vector[k]=j;
else Link_Vector[k]=i;
return Link_Vector[0];
}
int MergeSort::MergeSort_Sort(int left,int right)
{
if(left>=right) return left;
int middle=(left+right)/2;
return MergeSort_Sort(MergeSort_List_Merge(left,middle),MergeSort_List_Merge(middle+1,right));
}
vector<int> MergeSort::MergeSort_Split(vector<int> _Int_Vector,int _Vector_Size)
{
IntDefVector VectorLeft;
IntDefVector VectorRight;
IntDefVector VectorResult;
//取中间下标
int Middle=_Vector_Size/2;
//如果数组只有一个元素,直接返回,无需排序
if(_Vector_Size<=1)
return _Int_Vector;
for(int k=0;k<_Vector_Size;k++)
{
if(k<Middle)
{
VectorLeft.push_back(_Int_Vector[k]);
}
else
{
VectorRight.push_back(_Int_Vector[k]);
}
}
//递归拆分左数组
VectorLeft=MergeSort_Split(VectorLeft,VectorLeft.size());
//递归拆分右数组
VectorRight=MergeSort_Split(VectorRight,VectorRight.size());
///排序并合并
VectorResult=MergeSort_Merge(VectorLeft,VectorLeft.size(),VectorRight,VectorRight.size());
return VectorResult;
}
vector<int> MergeSort::MergeSort_Merge(std::vector<int> _Int_Vector_left, int _Int_Vector_left_Len,
std::vector<int> _Int_Vector_Right, int _Int_Vector_Right_Len)
{
IntDefVector VectorResult;
int i=0,j=0;
while(i<_Int_Vector_left_Len && j<_Int_Vector_Right_Len)
{
if(_Int_Vector_left[i]<_Int_Vector_Right[j])
//将小的赋值到结果
VectorResult.push_back(_Int_Vector_left[i++]);
else
//将小的赋值到结果
VectorResult.push_back(_Int_Vector_Right[j++]);
}
while(i<_Int_Vector_left_Len)
{
//将最后一个元素赋值到结果
VectorResult.push_back(_Int_Vector_left[i++]);
}
while(j<_Int_Vector_Right_Len)
{
//将最后一个元素赋值到结果
VectorResult.push_back(_Int_Vector_Right[j++]);
}
return VectorResult;
}
void MergeSort::MergeSort_Output()
{
int i=Link_Vector[0];
int j=0;
while(i)
{
j++;
cout<<List_Vector[i]<<" ";
i=Link_Vector[i];
if(i>5&&i%10==0)
cout<<endl;
}
cout<<endl;
}
梦想与现实的落差,就是我们离成功的距离~