归并排序给定一个数列,用归并排序算法把它排成升序c语言吧,C++习题-归并排序...

有数列{6 58 14 2 19 354 684 4}

(1)申请一个数组q,准备存放合并后的序列

(2)将原序列拆分为左序列{6 58 14 2}与右序列{19 354 68 4}

(3)将左右数组分别有序排列成{2 6 14 58}及{4 19 68 354} [这一过程通过递归重复(2)~(7)实现]

(4)设定i,j分别为两序列的初始位置

(5)比较i,j位置对应元素大小,选择小的放入数组q,同时将i或j加1

(6)重复步骤(5)直到i或j中有一个达到序列尾

(7)最后将剩余的元素复制到数组q中,两子序列就合并为一个有序序列了

注:本题只需提交部分代码,输入n(n<=100)及n个整数,输出按从小到大顺序排列好的数据

#include

using namespace std;

void MergeSort(int p[],int s,int m,int t)

{

int q[100];        //临时数组q[100]用来存放排好的序列

int i,j,k;            //i作为左数组起始位置,j作为右数组起始位置,k为临时数组位置

for (i=s,j=m+1,k=0; k<=t-s; k++)

{

if (i==m+1)      //当i到达左数组的最后时,将右数组余下元素复制到临时数组中

{

q[k]=p[j];

j++;

continue;

}

if (j==t+1)        //当j达到右数组最后时,将左数组剩余元素复制到临时数组中

{

q[k]=p[i];

i++;

continue;

}

///

/*

请在该部分填写缺少的代码

*/

}

for(i=s,j=0; i<=t; i++,j++) //将临时数组的对应各项值赋给数组p[100]

p[i]=q[j];

}

void Merge(int p[],int s,int t)

{

if(s

{

int m=(s+t)/2;

Merge(p,s,m);           //递归对左数组进行归并

Merge(p,m+1,t);        //递归对左数组进行归并

MergeSort(p,s,m,t);   //合并数组

}

}

int main()

{

int n;//n为输入数据的个数

int p[100];

cin>>n;

for(int i=0; i

cin>>p[i];

Merge(p,0,n-1);        //调用函数进行归并

for(int i=0; i

cout<

cout<

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值