查找算法

java数据结构-查找算法-二分算法

痞子三分冷 提交于 2020-02-12 14:24:00
package com.fu;/** * @auther 付强 * @date 2020/2/12 - 12:58 *///二分查找public class testsearch1 { public static void main(String[] args) { int arr[]={1,3,5,7,11,12,14}; //定义一个要查找的值 int s=12; //设置一个中位数 int mid; //定义最小值 int min=0; //定义最大值 int max=arr.length-1; //索引 int index=-1; while(true){ mid=(min+max)/2; if(arr[mid]>s){ max=mid-1; } if(arr[mid]<s){ min=mid+1; }if(arr[mid]==s){ index=mid; break; } } System.out.println(index); }} 来源: https://www.cnblogs.com/fuqiang-java/p/12298714.html

深入理解JavaScript系列(14):作用域链(Scope Chain)

给你一囗甜甜゛ 提交于 2020-02-11 04:55:43
前言 在第12章关于变量对象的描述中,我们已经知道一个执行上下文 的数据(变量、函数声明和函数的形参)作为属性存储在变量对象中。 同时我们也知道变量对象在每次进入上下文时创建,并填入初始值,值的更新出现在代码执行阶段。 这一章专门讨论与执行上下文直接相关的更多细节,这次我们将提及一个议题——作用域链。 英文原文:http://dmitrysoshnikov.com/ecmascript/chapter-4-scope-chain/中文参考:http://www.denisdeng.com/?p=908本文绝大部分内容来自上述地址,仅做少许修改,感谢作者 定义 如果要简要的描述并展示其重点,那么作用域链大多数与内部函数相关。 我们知道,ECMAScript 允许创建内部函数,我们甚至能从父函数中返回这些函数。 var x = 10; function foo() { var y = 20; function bar() { alert(x + y); } return bar; } foo()(); // 30 这样,很明显每个上下文拥有自己的变量对象:对于全局上下文,它是全局对象自身;对于函数,它是活动对象。 作用域链正是内部上下文所有变量对象(包括父变量对象)的列表。此链用来变量查询。即在上面的例子中,“bar”上下文的作用域链包括AO(bar)、AO(foo)和VO

二分查找排序

孤街浪徒 提交于 2020-02-09 03:22:20
首先对查找的列表有两个要求:(1)、必须采用顺序存储结构(2)、必须按关键大小有序排列 算法思想:首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等则查找成功,否则利用中间位置记录将表分成前后两个字表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。 重复上述过程,知道找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 测试程序如下所示: 点击( 此处 )折叠或打开 #include < stdio . h > int Find ( int a [ ] , int x , int length ) { int low , high ; int mid ; low = 1 , high = length ; while ( low < = high ) { mid = ( low high ) / 2 ; if ( x = = a [ mid ] ) return mid ; else if ( x > a [ mid ] ) low = mid 1 ; else high = mid - 1 ; } return 0 ; } int main ( ) { int length ; int i , x ; int flag ; int a [ 100 ] ; printf ( "请输入元素的个数: " ) ;

顺序查找和二分查找

余生长醉 提交于 2020-02-09 02:44:43
1. 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组[转] 2.顺序查找 <?php //$n为待查找的数组元素的个数,$k为待查找的元素 function seq_sch($array, $n, $k) { $array[$n] = $k; for($i=0; $i<$n; $i++) { if($array[$i]==$k) { return true; break; } } if ($i<$n) //判断是否到数组的末尾 { return $i; } else { return false; } } $array = array(3, 6, 1, 9, 2, 10); $n = count($array); $k = 8; if(seq_sch($array, $n, $k)) { echo "顺序查找成功"; } else { echo "顺序查找失败"; } ?> 顺序查找 是在一个已知无序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。 3.二分查找 <?php //$low为待查找的数组中的最小值,$high为数组中的最大值,$k为要查找的关键字 function bin_sch($array, $low, $high, $k) { if

数据结构之搜索算法一:二分查找

巧了我就是萌 提交于 2020-02-08 23:14:25
  前面回顾了几个主要的排序算法,排完序就该搜索了,主要的查找类型分为静态查找表和动态查找表两大类,先看看静态查找表常用算法,二分搜索。 二分搜索原理如下:   二分查找又称折半查找,它是一种效率较高的查找方法。   【二分查找要求】: * 1.必须采用顺序存储结构 * 2.必须按关键字大小有序排列。 *   【优缺点】折半查找法的优点是比较次数少,查找速度快,平均性能好; * 其缺点是要求待查表为有序表,且插入删除困难。 * 因此,折半查找方法适用于不经常变动而查找频繁的有序列表。 *   【算法思想】首先,将表中间位置记录的关键字与查找关键字比较, * 如果两者相等,则查找成功; * 否则利用中间位置记录将表分成前、后两个子表, * 如果中间位置记录的关键字大于查找关键字, * 则进一步查找前一子表,否则进一步查找后一子表。   重复以上过程,直到找到满足条件的记录,使查找成功, * 或直到子表不存在为止,此时查找不成功。 代码 public int Search( int [] seqList, int key) { int flag = - 1 ; int mid; int low = 0 ; int high = seqList.Length - 1 ; while (low < high) { mid = (high + low) / 2 ; if (seqList

二分查找算法(JAVA)

笑着哭i 提交于 2020-02-08 17:38:47
1.二分查找又称折半查找,它是一种效率较高的查找方法。 2.二分查找要求:(1)必须采用 顺序存储结构 (2).必须按关键字大小 有序排列 3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后;将要查找的值和数组的中值进行比较,若小于中值则在中值前 面找,若大于中值则在中值后面找,等于中值时直接返回。然后依次是一个递归过程,将前半部分或者后半部分继续分解为三部分。     其查找的基本思路:首先将给定值K,与表中中间位置元素的关键字比较,若相等,返回该元素的存储位置;若不等,这所需查找的元素只能在中间数据以外的前半部分或后半部分中。然后在缩小的范围中继续进行同样的查找。如此反复直到找到为止。 4.实现:二分查找的实现用递归和循环两种方式 5.代码: 1 package other; 2 3 public class BinarySearch { 4 /* 5 * 循环实现二分查找算法arr 已排好序的数组x 需要查找的数-1 无法查到数据 6 */ 7 public static int binarySearch(int[] arr, int x) { 8 int low = 0; 9 int high = arr.length-1; 10 while(low <= high) { 11 int middle = (low + high)/2

mysql数据库-索引-长期维护

╄→尐↘猪︶ㄣ 提交于 2020-02-08 02:32:35
############### 索引介绍 ############## """ 1. 索引介绍 需求: 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的, 也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。 说起加速查询,就不得不提到索引了。 索引: 简单的说,相当于图书的目录,可以帮助用户快速的找到需要的内容. 在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。能够大大提高查询效率。 特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍. 本质: 索引本质:通过不断地缩小想要获取数据的范围来筛选出最终想要的结果, 同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。 """ ############### 索引方法 ############## """ 2.索引方法 1. B+TREE 索引 B+树是一种经典的数据结构,由平衡树和二叉查找树结合产生,它是为磁盘或其它直接存取辅助设备而设计的一种平衡查找树, 在B+树中,所有的记录节点都是按键值大小顺序存放在同一层的叶节点中,叶节点间用指针相连,构成双向循环链表, 非叶节点(根节点、枝节点)只存放键值,不存放实际数据。 注意:通常其高度都在2

数据结构——红黑树

别来无恙 提交于 2020-02-06 18:37:38
文章目录 1 引言 2 定义 定义节点名称: 3 性质 4 2-3-4树和红黑树的等价关系 5 查找 6 插入 6.1(情景3) 插入节点的父节点为黑色 6.2(情景4) 插入节点的父节点为红色,叔叔节点为黑色 6.2.1(情景4.2.1) 父节点P为G左孩子,插入位置为左孩子 6.2.2(情景4.2.2) 父节点P为G左孩子,插入位置为右孩子 6.2.3(情景4.3.1) 父节点P为G右孩子,插入位置为右孩子 6.2.4(情景4.3.2) 父节点P为G右孩子,插入位置为左孩子 6.3(情景4.1) 插入节点的父节点为红色,叔叔节点为红色 6.3.1(情景4.1) 插入位置为左子树 6.3.2(情景4.1) 插入位置为右子树 7 删除 删除情景1:替换结点是红色结点 7.1 删除红色叶子节点 7.2 删除红色节点,只有左子树或只有右子树 7.3 删除红色节点,既有左子树又有右子树 7.4 删除的黑色节点仅有左子树或者仅有右子树 7.5 删除黑色的叶子节点 8 总结 9 思考题和习题答案 思考题1:黑结点可以同时包含一个红子结点和一个黑子结点吗? 习题1:请画出图15的插入自平衡处理过程。 习题2:请画出图29的删除自平衡处理过程。 推荐阅读 1 引言 红黑树 是 树 的 数据结构 中最为重要的一种。 Java 的容器 TreeSet 、 TreeMap 均使用 红黑树 实现。

Python学习07:使用dict和set

依然范特西╮ 提交于 2020-02-06 12:50:12
在FirstDemo中创建Directory,名为com.first.dict_set,然后在directory下创建Python文件,名为Demo06。 dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list: names = ['Michael', 'Bob', 'Tracy'] scores = [95, 75, 85] 给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。 如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下: >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} >>> d['Michael'] 95 为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的。假设字典包含了1万个汉字,我们要查某一个字,一个办法是把字典从第一页往后翻,直到找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢。

五种查找算法总结

让人想犯罪 __ 提交于 2020-02-06 05:25:39
http://www.cnblogs.com/butyoux/archive/2013/01/15/2861291.html 下列五种查找算法,除顺序查找外,其他算法的思路基本相同:   先对数据按某种方法进行排序,然后使用相应的规则查找。 因此,搞清 排序算法 才是关键。 一、顺序查找   条件:无序或有序队列。   原理:按顺序比较每个元素,直到找到关键字为止。   时间复杂度:O(n) 二、二分查找(折半查找)   条件:有序数组   原理:查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;      如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。      如果在某一步骤数组为空,则代表找不到。      这种搜索算法每一次比较都使搜索范围缩小一半。   时间复杂度:O(logn) 三、二叉排序树查找   条件:先创建二叉排序树:       1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;       2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;       3. 它的左、右子树也分别为二叉排序树。   原理:     在二叉查找树b中查找x的过程为:     1. 若b是空树,则搜索失败,否则:     2.