题目:线性表中的元素递增有序且按照顺序存储在计算机中,要求设计一种算法在最少时间内查找到数值为X的元素,若找到则将其与后继元素位置交换,若找不到则将其插入表中使表中元素仍递增有序 分析:要求最少时间则采用折半查找,分为递归和循环两种。若找到元素后该元素位置为最后一个则不做处理,若找不到该元素后插入该 ...
分类:
编程语言 时间:
2020-06-28 09:31:56
阅读次数:
65
一、思维导图: 二、需要留意的点 链式结构可以进行二分查找,但是不能在对数时间内完成,因为要对数字下标进行随机访问,实际都得遍历一遍,需要O(n) 二分查找应用场景的局限性: (1)基于顺序表的存储结构; (2)针对有序数据; (3)数据量小且比较操作不耗时时 (4)数据量不能太大(需要连续的内存空 ...
分类:
其他好文 时间:
2020-06-27 20:12:59
阅读次数:
66
一、第七章内容小结 1. 查找的基本概念 2. 线性表的查找 ① 顺序查找:从表的一端开始依次将记录的关键字和给定值进行比较,某记录的关键字和定值相等则查找成功;反之,扫描整个表未找到相等记录,则查找失败。顺序查找适用于线性表的顺序存储结构和链式存储结构。 2-1基于顺序表的顺序查找算法: 1 in ...
分类:
其他好文 时间:
2020-06-27 16:03:50
阅读次数:
78
1. 平均比较次数的计算 题目 有个长度为12的无重复有序表,按折半查找法进行查找,在表内各元素等概率情况下,查找成功所需的平均比较(三元比较)的次数为() 解题思路 表内各元素等概率的情况下,不需要进行加权平均,算术平均就行了。计算出每个元素查找成功所需的比较次数,然后除以数组的长度。 1个元素只 ...
分类:
编程语言 时间:
2020-06-27 11:47:23
阅读次数:
72
顺序查找 监视哨的顺序查找 因为每次循环都需要对是否越界,即是否小于n做判断。事实上,还可以有更好一点的办法,设置一个哨兵,可以解决不需要每次让i与n作比较。 折半查找(二分查找) 二分查找(又称为折半查找)是在有序序列中查找比较多的查找算法,基本思路:设有一个从小到大的序列,取中间的元素m进行比较 ...
分类:
其他好文 时间:
2020-06-27 09:20:15
阅读次数:
58
用倍增法求后缀数组、名次数组 sa为后缀数组、rank为名次数组 //二分查找法,返回最接近的位置和实际位置 function binary_find(id,hasSortArr){ let l=0,r=hasSortArr.length; let index=-1; while(r-l>0){ c ...
分类:
编程语言 时间:
2020-06-26 16:39:28
阅读次数:
53
一、本章的思维导图 二、总结 顺序查找本来以前以为自己打的代码就已经很漂亮了,根本没有再关注还可以再怎么优化它,本章学习到了一个监视哨的概念虽然这个算法的时间复杂度还是O(n)级别的,但是却减少了一半的时间开销,要是数据量很大的情况下还是很客观的,所以还是一个很棒的点。折半查找,可能以前或多或少也有 ...
分类:
其他好文 时间:
2020-06-26 14:48:58
阅读次数:
48
//二分查找法,返回最接近的位置和实际位置 function binary_find(id,hasSortArr){ let l=0,r=hasSortArr.length; let index=-1; while(r-l>0){ const m=(l+r)>>1; const mid=hasSor ...
分类:
编程语言 时间:
2020-06-25 17:48:53
阅读次数:
87
1.数组的拷贝 System类里包含一个static void arraycopy(object src,int scrops,object dest,int destpos,int length)方法,该方法可以将src数组里的元素值赋值给dest数组的元素。 其中srcops指定从src数组的第 ...
分类:
编程语言 时间:
2020-06-25 16:02:42
阅读次数:
53
二分算法(未完) 前言 二分属于分治的一种,很多题都需要用到这种高效简洁的算法 所以,二分是必掌握的算法,这篇博客就是我的二分的学习记录qwq 目录 二分算法知识 整数集合上的二分 实数域上的二分法 二分法的常见模型 二分答案题目 二分答案题解 二分查找题目 二分查找题解 二分 PS:以下部分内容摘 ...
分类:
其他好文 时间:
2020-06-24 16:05:26
阅读次数:
47