#include <iostream>
using namespace std;
//st1->end 和end+1->到n这两个数列的归并算法
void merge(int * data,int st1,int end,int endend)
{
int length1= end-st1+1;
int length2= endend-end;
int* L = new int[length1];
int* R = new int[length2];
int i=0;
for(i=0;i<length1;i++)
{
L[i]=data[st1+i];
}
for(i=0;i<length2;i++)
{
R[i]=data[end+i+1];
}
int left=0;
int right=0;
i=st1;
while(left!=(length1)&&right!=(length2))
{
if(L[left]<R[right])
{
data[i]=L[left];
left++;
}
else
{
data[i]=R[right];
right++;
}
i++;
}
if(left==length1)
{
for(;right<length2;right++)
{
data[i]=R[right];
i++;
}
}
if(right==length2)
{
for(;left<length1;left++)
{
data[i]=L[left];
i++;
}
}
delete [] L;
delete [] R;
}
void MergeSort(int * data,int st,int end)
{
//if(st==end) return;
if(st<end)
{
int n = (end+st)/2;
MergeSort(data,st,n);
MergeSort(data,n+1,end);
merge(data,st,n,end);
int i;
cout<<endl;
cout<<"st:"<<st<<" n:"<<n<<" end:"<<end<<" ";
for(i=0;i<11;i++)
{
cout<<data[i]<<" ";
//cout<<m[i]<<" ";
}
}
}
int main()
{
int m[]={1,10,2,5,3,2,9,18,100,99,8};
MergeSort(m,0,10);
int i=0;
cout<<endl;
for(i=0;i<11;i++)
{
cout<<m[i]<<" ";
//cout<<m[i]<<" ";
}
while(1);
return 0;
}
归并排序
最新推荐文章于 2024-08-12 19:32:44 发布