C++归并算法实例

 更新时间:2015年07月14日 11:13:08   作者:G0561  
这篇文章主要介绍了C++归并算法,实例分析了C++实现基于归并算法合并线性表的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了C++归并算法。分享给大家供大家参考。具体如下:

/* 
 归并算法:把两个或两个以上的线性表合并在一起,形成一个新的线性表
 函数模版的基本使用
 程序意图:将两个相同类型的线性表元素排好序,然后将他们组合成一个排好的线性表 
*/
#include <iostream>
using namespace std;
const int n = 5; //5个元素 
//输出数据元素
template <class T1>
void OutPut(T1 out[(2*n)])
{ 
  for (int i=0; i<(2*n); i++)
  { 
  cout<<out[i]<<" ";
  }
  cout<<endl;
} 
//输入数据元素 
template <class T2>
void InPut(T2 in[n])
{
  cout<<"请输入5个数据元素:";
  for (int i=0; i<n; i++)
  { 
  cin>>in[i];
  cout<<" "; 
  }
  cout<<endl;
}
//模版函数 输入线性表元素并将其排序
template <class T3> 
void MySort(T3 a[2*n])
{
  int temp; //交换数据临时变量 
  //冒泡锚序 
  for (int i=0; i<2*n-1; i++)
  {
   for (int j=0; j<2*n-1-i; j++)
   {
    if (a[j]>a[j+1]) 
    {
    temp = a[j];
    a[j] = a[j+1];
    a[j+1] = temp; 
    }
   }
  }
}
//模版函数 归并 
template <class T> 
void MergeList(T La[n], T Lb[n], T Lc[(2*n)]) 
{
  int i = 0; //作为La的下标 
  int j = 0; //Lb下标
  int k = 0; //Lc下标 
  //将La Lb组合成在一起 
  while (i<n && j<n)
  {
   if (La[i] < Lb[j])
   {
    Lc[k] = La[i];
    k++;
    Lc[k] = Lb[j];
   }
   else
   {
    if (La[i] == Lb[j])
    {
     Lc[k] = La[i];
     k++;
     Lc[k] = Lb[j];
    }
    else
    {
     Lc[k] = Lb[j];
     k++;
     Lc[k] = La[i];
    }
   }
   //各下标往下移动 
   i++;
   j++;
   k++;
  } 
  //如果La中的数据没有取完,及La比Lb长,则将La剩下的元素插入Lc中 这里是进行扩展 
  while (i<=n)
  {
   Lc[k++] = La[i++];
  } 
  //如果Lb中的数据没有取完,及Lb比La长,则将Lb剩下的元素插入Lc中
  while (j<=n)
  {
    Lc[k++] = Lb[j++];
  } 
  //对组合好的元素进行排序 
  MySort(Lc); 
}
int main()
{
 int a1[n],a2[n], a[(2*n)];
 double b1[n], b2[n],b[(2*n)];
 char m1[n], m2[n], m[(2*n)];
 //输入数据 归并输出 
 /*InPut(a1);
 InPut(a2); 
 MergeList(a1,a2,a);
 OutPut(a); */
 InPut(m1);
 InPut(m2); 
 MergeList(m1,m2,m);
 OutPut(m); 
 system("pause");
 return 0;
} 

希望本文所述对大家的C++程序设计有所帮助。

您可能感兴趣的文章:

相关文章

  • C++和C中const的区别详解

    C++和C中const的区别详解

    这篇文章主要为大家介绍了C++和C中const的区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • C语言中scanf函数与空格回车的用法说明

    C语言中scanf函数与空格回车的用法说明

    这篇文章主要介绍了C语言中scanf函数与空格回车的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C++实践排序函数模板项目的参考方法

    C++实践排序函数模板项目的参考方法

    今天小编就为大家分享一篇关于C++实践排序函数模板项目的参考方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • C语言宏定义#define的使用

    C语言宏定义#define的使用

    本文主要介绍了C语言宏定义#define的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C++ 数据结构之水洼的数量算法

    C++ 数据结构之水洼的数量算法

    这篇文章主要介绍了C++ 数据结构之水洼的数量算法的相关资料,需要的朋友可以参考下
    2017-06-06
  • C语言 typedef:给类型起一个别名

    C语言 typedef:给类型起一个别名

    本文主要介绍C语言 typedef,这里整理了相关资料及简单示例代码帮助大家学习理解,有兴趣的小伙伴可以参考下
    2016-08-08
  • C语言数据在内存中的存储流程深入分析

    C语言数据在内存中的存储流程深入分析

    使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。您可能需要存储各种数据类型的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么
    2022-10-10
  • C++超详细分析顺序表

    C++超详细分析顺序表

    程序中经常需要将一组数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等。一组数据中包含的元素个数可能发生变化,顺序表则是将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示
    2022-03-03
  • 基于Qt实现离线瓦片地图下载器

    基于Qt实现离线瓦片地图下载器

    这篇文章主要介绍了如何通过Qt实现离线瓦片地图下载器,文中的示例代码对我们学习或工作有一定的帮助,感兴趣的可以跟随小编一起学习一下
    2022-01-01
  • C语言中宏定义的妙用方法

    C语言中宏定义的妙用方法

    今天小编就为大家分享一篇关于C语言中宏定义的妙用方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12

最新评论