您的位置:首页 > 其它

二路归并排序

2015-04-11 20:33 211 查看
递归版本(也是最方便的版本咯)
#include<iostream>
#include<cstdio>
const int max=1000;
void merge(int *rui,int L1start,int L1end,int L2start,int L2end)
//分组归并
{
int i=L1start,j=L2start;
int temp[max],index=0;
while(i<=L1end&&j<=L2end)
{
if(rui[i]<=rui[j])
{
temp[index++]=rui[i++];
}
else
{
temp[index++]=rui[j++];
}
}
while(i<=L1end)
{
temp[index++]=rui[i++];
}
while(j<=L2end)
{
temp[index++]=rui[j++];
}
for(int i=0;i<index;++i)
{
rui[L1start+i]=temp[i];
//注意i不能从0开始,二路的话右边那组起点可不是0
}
}
void MergeSort(int *str,int left,int right)
{
if(left<right)//这是递归边界
{
int mid=(left+right)/2;
MergeSort(str,left,mid);
MergeSort(str,mid+1,right);
merge(str,left,mid,mid+1,right);
}
}
using namespace std;
int main()
{
int str[]={66,12,33,57,64,27,18,100,24,599};
MergeSort(str,0,9);
for(int i=0;i<10;++i)
{
cout<<str[i]<<" ";
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: