有序表和并

本文介绍了如何将两个有序顺序表合并成一个有序顺序表。通过不断比较两个表的表头元素,选择较小者插入新表,直至某表为空,再将另一表剩余元素全部加入。在原序排列下,时间复杂度在最好情况下为O(min(m,n)),最坏情况下为O(m+n-1);而逆序排列时,时间复杂度始终为O(m+n)。" 114810128,10538125,使用C语言和Java计算阶乘,"['C语言编程', 'Java编程', '算法', '数学运算', '用户输入']
摘要由CSDN通过智能技术生成

问题:将两个有序顺序表合并成一个有序顺序表。

算法思想:不断取两个顺序表表头,比较大小,将小者存入新的有序顺序表,直至其中一个表比较完毕,将另一个剩余的表全部存入新的顺序表。

如果合并后仍让原序排列: 

           最好情况:  其中一个有序列表 的元素  一 一对应的小于 另一个有序表的元素  ;

                                比较次数---min(m,n)次              时间复杂度O(min(m,n))

           最坏情况:    两个表的元素交替增加 ;

                                比较次数---(m+n-1) 次               时间复杂度O(m+m)

 如果合并后让 原序的逆序排列:  无论最好还是最坏,时间复杂度O(m+n);

 

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define Maxsize 50
int flag=1;                    //利用变量构造两个不同的有序表


typedef struct SqList{
        int* data;
        int length;
        };

// ---------------------------- 初始化-----------------------------
bool InitList(struct SqList* L,int length)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值