您的位置:首页 > 编程语言 > C语言/C++

归并排序-c++代码实现及运行实例结果

2017-12-14 00:39 666 查看
假设桌上有两堆牌面朝上的牌,每堆都已排序,最小的牌在顶上。我们希望把这两堆牌合并成单一的排好序的输出堆,牌面朝下地放在桌上。我们的基本步骤包括在牌面朝上的两堆牌的顶上两张牌中选取较小的一张,将该牌从其堆中移开(该堆的顶上将显露一张新牌)并牌面朝下地将该牌放置到输出堆。

归并排序相关文字资料网上较多,在此不再叙述。

cpp代码

#include<iostream>
using namespace std;

void merge(int num[],int beg,int mid,int end);
void mergeSort(int num[],int beg,int end);

int main()
{

int data[] = {3,6,7,2,1,4,5,9,8};
int length = 9;
cout << "before sorted:" << endl;
for(int i = 0;i < length;++i)
cout << data[i] << "  ";
cout << endl;
cout << "after sorted:" << endl;
mergeSort(data,0,length-1);
for(int i = 0;i < length;++i)
cout << data[i] << "  ";
cout << endl;

return 0;

}

void merge(int num[],int beg,int mid,int end)
{
int temp[10];
int t=beg;
int i=beg,j=mid+1;
while(i<=mid&&j<=end)
{
if(num[i]<num[j])
temp[t++]=num[i++];
else
temp[t++]=num[j++];
}
while(i<=mid)
temp[t++]=num[i++];
while(j<=end)
temp[t++]=num[j++];
for(int i=beg;i<=end;i++)
num[i]=temp[i];
}

void mergeSort(int num[],int beg,int end)
{
if(beg==end)
return;
int mid=(beg+end)/2;
mergeSort(num,beg,mid);
mergeSort(num,mid+1,end);
merge(num,beg,mid,end);
}


运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: