设计一个算法,用最少的时间在顺序表中找到x,若找到,与后继交换,找不到插入到顺序表中,任保持有序。

本文主要是介绍设计一个算法,用最少的时间在顺序表中找到x,若找到,与后继交换,找不到插入到顺序表中,任保持有序。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:线性表(a1,a2.........an)中的元素递增有序且按照顺序存储在计算机中。设计一个算法,用最少的时间在顺序表中查找数值为x的元素,若找到,则将其与后继元素位置相交换,若找不到,将其插入到顺序表中,任保持递增有序。

思想:最少时间找到,则使用折半查找进行寻找x,确定x是否在表中。查找结束后,进行交换后继或者插入。

代码:

//折半查找 
int HalfSearsh(SqLlist &L,ElemType x){int mid,low=0,high=L.length-1;if(low<=higt){mid=(low+higt)/2;if(L.data[mid]==x){//查找成功 return mid;}else if (L.data[mid]<x){low = mid + 1;//右侧找 }else{higt = mid - 1;//左侧找 }}return higt;//查找失败,最后一个小于x的值的下标为hight 
}
//交换 
void swap(ElemType &a,ElemType &b){int temp;temp=a;a=b;b=temp
}
//插入 
int Insert(SqList &L,int index,ElemType x){if(index<0 || index>L.length) {return false;}for(int i=L.length-1;i>=index;i--){L.data[i+1]=index[i];//后移动 }L.data[i+1]=x;//插入 L.length++;return true;} 
void SearchExchangeInsert(SqList &L,ElemType x){int XIndex=HalfSearsh(L,x);//折半查找元素x//查找成功,与后继进行交换if(L.data[XIndex]==x){if(XIndex != L.length-1) {//x为最后一个元素时,不需要交换 swap(L.data[XIndex],L.data[XIndex+1]) ;	} else{//没有找到,则在对应的位置插入x Insert(L,XIndex+1,x);}}

时间复杂度O(logn) 到 O(n) 之间,具体取决于 x 是否在列表中;空间复杂度O(1)

这篇关于设计一个算法,用最少的时间在顺序表中找到x,若找到,与后继交换,找不到插入到顺序表中,任保持有序。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1119511

相关文章

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

Python日期和时间完全指南与实战

《Python日期和时间完全指南与实战》在软件开发领域,‌日期时间处理‌是贯穿系统设计全生命周期的重要基础能力,本文将深入解析Python日期时间的‌七大核心模块‌,通过‌企业级代码案例‌揭示最佳实践... 目录一、背景与核心价值二、核心模块详解与实战2.1 datetime模块四剑客2.2 时区处理黄金法

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

MySQL中SQL的执行顺序详解

《MySQL中SQL的执行顺序详解》:本文主要介绍MySQL中SQL的执行顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql中SQL的执行顺序SQL执行顺序MySQL的执行顺序SELECT语句定义SELECT语句执行顺序总结MySQL中SQL的执行顺序

Pandas进行周期与时间戳转换的方法

《Pandas进行周期与时间戳转换的方法》本教程将深入讲解如何在pandas中使用to_period()和to_timestamp()方法,完成时间戳与周期之间的转换,并结合实际应用场景展示这些方法的... 目录to_period() 时间戳转周期基本操作应用示例to_timestamp() 周期转时间戳基

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

JavaScript时间戳与时间的转化常用方法

《JavaScript时间戳与时间的转化常用方法》在JavaScript中,时间戳(Timestamp)通常指Unix时间戳,即从1970年1月1日00:00:00UTC到某个时间点经过的毫秒数,下面... 目录1. 获取当前时间戳2. 时间戳 → 时间对象3. 时间戳php → 格式化字符串4. 时间字符

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及