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++程序设计有所帮助。

(0)

相关推荐

  • 归并算法之有序数组合并算法实现

    归并算法之有序数组合并算法实现 一个简单的有序数组合并算法:写一个函数,传入 2 个有序的整数数组,返回一个有序的整数数组.实现相当简单,创建一个长度为这两个长度之和的数组,然后分别用三个指针指向这三个数组,找到这两个数组中各个元素在合并数组中的位置并插入,直到某个数组指针到达尾部.再将另一个数组剩下的所有元素,直接放入归并数组尾部.算法的简单实现,需要注意的是对参数的校验,判断数组是否有序. public class MergeOrderedArray { public static int[

  • C++归并算法实例

    本文实例讲述了C++归并算法.分享给大家供大家参考.具体如下: /* 归并算法:把两个或两个以上的线性表合并在一起,形成一个新的线性表 函数模版的基本使用 程序意图:将两个相同类型的线性表元素排好序,然后将他们组合成一个排好的线性表 */ #include <iostream> using namespace std; const int n = 5; //5个元素 //输出数据元素 template <class T1> void OutPut(T1 out[(2*n)]) {

  • 对python数据切割归并算法的实例讲解

    当一个 .txt 文件的数据过于庞大,此时想要对数据进行排序就需要先将数据进行切割,然后通过归并排序,最终实现对整体数据的排序.要实现这个过程我们需要进行以下几步:获取总数据行数:根据行数按照自己的需要对数据进行切割:对每组数据进行排序 最后对所有数据进行归并排序. 下面我们就来实现这整个过程: 一:获取总数据的行 def get_file_lines(file_path): # 目标文件的路径 file_path = str(file_path) with open(file_path, 'r

  • Java 归并排序算法、堆排序算法实例详解

    基本思想: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并排序示例: 合并方法: 设r[i-n]由两个有序子表r[i-m]和r[m+1-n]组成,两个子表长度分别为n-i +1.n-m. j=m+1:k=i:i=i; //置两个子表的起始下标及辅助数组的起始下标 若i>m 或j>n,转⑷ //其中一个子表已合并完,比较选取结束 //选取r[i]和r[j]较小的存入辅助数组

  • java 中模式匹配算法-KMP算法实例详解

    java 中模式匹配算法-KMP算法实例详解 朴素模式匹配算法的最大问题就是太低效了.于是三位前辈发表了一种KMP算法,其中三个字母分别是这三个人名的首字母大写. 简单的说,KMP算法的对于主串的当前位置不回溯.也就是说,如果主串某次比较时,当前下标为i,i之前的字符和子串对应的字符匹配,那么不要再像朴素算法那样将主串的下标回溯,比如主串为"abcababcabcabcabcabc",子串为"abcabx".第一次匹配的时候,主串1,2,3,4,5字符都和子串相应的

  • PHP实现克鲁斯卡尔算法实例解析

    本文实例展示了PHP实现的格鲁斯卡尔算法(kruscal)的实现方法,分享给大家供大家参考.相信对于大家的PHP程序设计有一定的借鉴价值. 具体代码如下: <?php require 'edge.php'; $a = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' ); $b = array( 'ab' => '10', 'af' => '11', 'gb' => '16', 'fg' => '17', 'bc' =>

  • php简单中奖算法(实例)

    今天遇到这样的一个问题  封装一个 抽奖概率函数 思前想后去网上找点资料吧,而且不止一种方法 这种我感觉还是比较容易的 还是那句话 实现功能的思路不止一种 代码也不止一种. function get_rand($proArr) { $result = ''; //概率数组的总概率精度 $proSum = array_sum($proArr); //概率数组循环 foreach ($proArr as $key => $proCur) { $randNum = mt_rand(1, $proSum

  • C C++ 算法实例大全

    C C++,算法实例 一.数论算法   1.求两数的最大公约数 function gcd(a,b:integer):integer; begin if b=0 then gcd:=a else gcd:=gcd (b,a mod b); end ; 2.求两数的最小公倍数 function lcm(a,b:integer):integer; begin if a<b then swap(a,b); lcm:=a; while lcm mod b>0 do inc(lcm,a); end; 3.

  • Android中关于递归和二分法的算法实例代码

    // 1. 实现一个函数,在一个有序整型数组中二分查找出指定的值,找到则返回该值的位置,找不到返回 -1. package demo; public class Mytest { public static void main(String[] args) { int[] arr={1,2,5,9,11,45}; int index=findIndext(arr,0,arr.length-1,12); System.out.println("index="+index); } // 1

  • JavaScript算法系列之快速排序(Quicksort)算法实例详解

    "快速排序"的思想很简单,整个排序过程只需要三步: (1)在数据集之中,选择一个元素作为"基准"(pivot). (2)所有小于"基准"的元素,都移到"基准"的左边:所有大于"基准"的元素,都移到"基准"的右边. (3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止. 举例来说,现在有一个数据集{85, 24, 63, 45,

随机推荐