二路归并c++完整版,可运行

本文详细介绍了归并排序算法的基本原理、递归过程以及具体实现方式,并通过实例展示了如何使用C++语言进行实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
using namespace std;

//[s,m]和[m+1,t]的合并
void merge (int r[],int r1[], int s,int m, int t)
{
       int i=s,j=m+1,k=s;
       while((i<=m )&&(j<= t))
      {
         if (r[i]<=r [j])
         {
               r1[k++]=r [i++];
         }
         else
         {
               r1[k++]=r [j++];
         }
      }

       if (i<=m )
      {
             while(i<=m )
                   r1[k++]=r [i++];
      }
       else
             while(j<=t )
                   r1[k++]=r [j++];

       //必须非常注意,必须加上
       for (int x= s;x<=t ;x++) //排完序过后一定要将有序的序列更新到 r[]数组中,因为下次还是用 r[]进行比较的
                              //归并排序要求归并的是两个有序的序列
      {
             r[x]=r1[x];
      }
}

//二路归并总的递归过程
void mergesort (int r[],int r1[], int s,int t)
{
       if (s<t)
      {
             int m=(s+t)/2;
             mergesort(r,r1,s,m);
             mergesort(r,r1,m+1,t);
             merge(r,r1,s,m,t);
      }
}


int main ()

{
       //初始化   
       int r[10]={10,1,20,5,4,13,6,9,8,7};
       int r1[10];
       for (int i=0; i<10;i ++)
      {
             r1[i]=0;
      }
       //调用,排序
       mergesort(r,r1,0,9);

       for (int i=0; i<10;i ++)
      {
             cout<<r1 [i]<< " ";
      }


       system("pause" );

       return 0;


}
  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值