数据结构:递增排列的数组 union all 算法 2.1

简介: 递增排列的数组 union all 假设有2个线性表,递增排列的数组,如 char a[20]="abbcopqtuwz"; char b[20]="bcfgjmtv"; 我们需要实现一个union all,将两个字符串中的字符合并到 一个新的线性表c中,其中也是按照递增排列的。
递增排列的数组 union all
假设有2个线性表,递增排列的数组,如
char a[20]="abbcopqtuwz";
char b[20]="bcfgjmtv";
我们需要实现一个union all,将两个字符串中的字符合并到

一个新的线性表c中,其中也是按照递增排列的。
那么按照我们要求输出应该为
abbbccfgjmopqttuvwz


那么算法如下:

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include <string.h>


  3. int main(void)
  4. {
  5.         char a[20]="abbcopqtuwz";
  6.         char b[20]="bcfgjmtv";

  7.         char c[30];
  8.         memset(c,0,30);

  9.         int n=0;
  10.         int m=0;
  11.         int h=0;

  12.         int a_len=strlen(a);
  13.         int b_len=strlen(b);

  14.         while(n<a_len && m<b_len)
  15.         {
  16.                 if(a[n]< b[m])
  17.                 {
  18.                         c[h]=a[n];
  19.                         n++;
  20.                 }
  21.                 else if(a[n]==b[m])
  22.                 {
  23.                         c[h]=a[n];
  24.                         n++;
  25.                 }
  26.                 else
  27.                 {
  28.                         c[h]=b[m];
  29.                         m++;
  30.                 }
  31.                 h++;
  32.         }

  33.         if(a[n] != 0)
  34.         {
  35.                 while(n<a_len)
  36.                 {
  37.                         c[h]=a[n];
  38.                         n++;
  39.                         h++;
  40.                 }
  41.         }

  42.         if(b[m] != 0 )
  43.         {
  44.                 while(m<b_len)
  45.                 {
  46.                         c[h]=b[m];
  47.                         m++;
  48.                         h++;
  49.                 }
  50.         }

  51.   
  52.         printf("%s\n",c);
  53. }



运行程序输出为:abbbccfgjmopqttuvwz
可以看到和预期一模一样。
分析这个算法的渐进时间复杂度,实际上我们发现他只是一个单循环,很明显我们原操作只是 c [ h ] = a [ n ] ;这样的复制
所以时间复杂度为:
T(n)=O(n)
但是这样的算法明显依赖于两个数组排序好了的情况
目录
打赏
0
0
0
0
91
分享
相关文章
|
1天前
|
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
29 9
 算法系列之数据结构-二叉树
关于员工上网监控系统中 PHP 关联数组算法的学术解析
在当代企业管理中,员工上网监控系统是维护信息安全和提升工作效率的关键工具。PHP 中的关联数组凭借其灵活的键值对存储方式,在记录员工网络活动、管理访问规则及分析上网行为等方面发挥重要作用。通过关联数组,系统能高效记录每位员工的上网历史,设定网站访问权限,并统计不同类型的网站访问频率,帮助企业洞察员工上网模式,发现潜在问题并采取相应管理措施,从而保障信息安全和提高工作效率。
18 7
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
87 29
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
97 25
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
72 23
|
1天前
|
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
40 22
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
55 2
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
81 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
基于CS模型和CV模型的多目标协同滤波跟踪算法matlab仿真
本项目基于CS模型和CV模型的多目标协同滤波跟踪算法,旨在提高复杂场景下多个移动目标的跟踪精度和鲁棒性。通过融合目标间的关系和数据关联性,优化跟踪结果。程序在MATLAB2022A上运行,展示了真实轨迹与滤波轨迹的对比、位置及速度误差均值和均方误差等关键指标。核心代码包括对目标轨迹、速度及误差的详细绘图分析,验证了算法的有效性。该算法结合CS模型的初步聚类和CV模型的投票机制,增强了目标状态估计的准确性,尤其适用于遮挡、重叠和快速运动等复杂场景。
基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络
本项目展示了人脸识别算法的运行效果(无水印),基于MATLAB2022A开发。核心程序包含详细中文注释及操作视频。理论部分介绍了广义回归神经网络(GRNN)、概率神经网络(PNN)、深度神经网络(DNN)和反向传播(BP)神经网络在人脸识别中的应用,涵盖各算法的结构特点与性能比较。