常见算法之二分查找

1、算法思想

二分查找采用分而治之的思想。要求被查找的集合必须是有序的。主要思路:

  1. 根据起始位置和结束位置,确定中间位置。
  2. 拿目标值与中间位置的值做比较,假如目标值大于中间位置取值,则起始位置为中间位置加1。
  3. 假如目标值小于中间位置取值,则结束位置为中间位置减1。
  4. 直至起始位置小于等于结束位置,找到目标值的位置即索引。

2、代码实现

2.1、基于Python3.x实现

代码如下:

 1 #coding:utf-8
 2 def half_search(lst,key):
 3     start = 0
 4     end = len(lst) - 1
 5     while start <= end:
 6         mid = int(start + end  / 2)
 7         if  lst[mid] > key:
 8             end = mid - 1
 9         elif lst[mid] < key:
10             start = mid + 1
11         else:
12             print("Matched the index of key %s is %s" %(lst[mid],mid))
13             return mid
14     return -1
15 l=[1,2,3,5,7]
16 half_search(l,2)

运行结果:

Matched the index of key 2 is 1

2.2、基于shell实现

代码如下:

 1 #/bin/bash
 2 function BinSearch(){
 3     declare -a arr=($1)
 4     key=$2
 5     start=0
 6     end=`expr ${#arr[*]} - 1`
 7         while [ ${start} -le ${end} ]
 8     do
 9         declare -i mid=$(((start+end)/2))
10         if [ ${arr[mid]} -lt ${key} ];then
11             start=$((mid+1))
12         elif [ ${arr[mid]} -gt ${key} ];then
13             end=$((mid-1))
14         else
15             echo ${mid}
16             break
17         fi
18
19
20     done
21 }
22 arr=(1  2 3 5 7 9)
23 echo "Index of 2 is:$(BinSearch "${arr[*]}"  2)"

运行结果:

Index of 2 is:1

2.3、基于Java实现

代码如下:

 1 class binSearch{
 2     //定义二分查找的函数
 3     public static int  binSearch(int[] arr,int key){
 4         int start=0;
 5         int end=arr.length - 1;
 6         //int mid=(start+end) /2;
 7         while(start<=end){
 8             int mid = (start + end) / 2;
 9             if(arr[mid]<key){
10                 start=mid+1;
11                 }
12             else if(arr[mid]>key){
13                 end=mid-1;
14                 }
15             else{
16                 System.out.print("Matched,index is:");
17                 return mid;
18                 }
19
20             }
21         return -1;
22         }
23     //验证二分查找
24         public static void main(String[] args){
25     int key=2;
26     int[] arr={1,2,3,5,7,9};
27     int keyIndex=binSearch(arr,key);
28     System.out.print(keyIndex);
29 }
30 }

运行结果:

Matched,index is:1

原文地址:https://www.cnblogs.com/webDepOfQWS/p/10663864.html

时间: 2024-07-30 00:25:06

常见算法之二分查找的相关文章

常见算法之二分查找法

public class BinarySearch { public static void main(String[] args) { int[] a = {1,2,3,4,5,6,7,8,9}; int binarySerach = binarySerach(a, 4); System.out.println(binarySerach); } public static int binarySerach(int[] a, int key) { int low = 0; int high =

查找算法:二分查找、顺序查找

08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/details/7747205 查找算法 查找算法是在存在的序列(list) 中查找特定的目标(target),要求序列中每个记录必须与一个关键词(key)关联才能进行查找. 查找算法通常需要两个输入: 1.被查找的序列 2.要查找的关键词 查找算法的输出参数和返回值: 1.返回类型为 Error_co

【数据结构与算法】二分查找

基本思想 首先将给定的值K与表中中间位置元素比较,若相等,则查找成功:若不等,则所需查找的元素只能在中间数据以外的前半部分或者后半部分,缩小范围后继续进行同样的查找,如此反复,直到找到为止. 代码实现 /** * 源码名称:BinarySearch.java * 日期:2014-08-14 * 程序功能:二分查找 * 版权:[email protected] * 作者:A2BGeek */ public class BinarySearch { public static int binaryS

算法系列&lt;二分查找&gt;

二分查找又称折半查找,是针对有序顺序表的查找,前提:数据是顺序存储的,已经按照关键词进行升序排序.查找成功返回索引值,查找不成功返回-1. 下面用java来实现二分查找算法: /** * 二分查找:针对已排好序的序列,查找成功返回所在位置的索引值,查找不成功返回-1 * 查找的最好时间复杂度:O(1),最坏时间复杂度O(logN),平均时间复杂度:O(logN) * 测试case: * case1:{1} 查找1 * case2:{1} 查找2 * case3:{} 查找1 * case4:{1

算法学习——二分查找(折半查找)

算法学习--二分查找 注意点 1. 二分查找的前提是有序的数组 2. 建议使用[start,end)的区间寻找,符合规范 3. 使用的是递归法 递归的人口 private static int find(int[] temp, int x) { //如果要查找的数x比数组的最后一个数要大,则找不到数值,返回-1 if (x > temp[temp.length - 1]) { return -1; } return find(temp, 0, temp.length, x);//进入递归 } 递

基础算法介绍 —— 二分查找算法

不知不觉在目前的公司待满3年了,打算回家找份工作.面试中被问到关于算法的题目:有哪些常见的查找算法?下来就把我所掌握的查找算法分享给大家,本文主要介绍二分查找算法. 算法定义(摘自百度):二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果

数据结构和算法之——二分查找上

二分查找(Binary Search)的思想非常简单,但看似越简单的东西往往越难掌握好,想要灵活运用就更加困难. 1. 二分查找的思想? 生活中二分查找的思想无处不在.一个最常见的就是猜数游戏,我随机写一个 0 到 99 的数,然后你来猜我写的是什么.猜的过程中,我会告诉你每次是猜大了还是猜小了,直到猜中为止.假如我写的数是 23,猜数过程如下所示. 最多只需要 7 次就猜出来了,这个过程是很快的.同理,要查找某个数据是否在给定的数组中,我们同样也可以利用这个思想. 二分查找针对的是一个有序的数

python几种排序算法和二分查找方法的实现

一.算法概念 - 含义:算法就是对问题进行处理且求解的一种实现思路或者思想. 评判程序优劣的方法 - 消耗计算机资源和执行效率(无法直观) 计算算法执行的耗时(不推荐,因为会受机器和执行环境的影响) 时间复杂度(推荐) 时间复杂度 - 评判规则:量化算法执行的操作/执行步骤的数量, - 如下列 def sumOfN(n): # 执行一步: theSum = 0 for i in range(1,n+1): # 下式一共执行n步,for循环不算一步,因为它是控制循环次数的 theSum = the

Java学习 (七)、数组,查找算法,二分查找法,冒泡排序,选择排序,插入排序

一.常用数组查找算法 工作原理:它又称为顺序查找,在一列给定的值中进行搜索,从一端的开始逐一检查每个元素,知道找到所需元素的过程. 例1:查找指定的数在数组中出现的位置,找到返回下标,找不到返回-1 1 import java.util.Scanner; 2 public class LinearSearch{ 3 public static void main(String []argas) 4 { 5 int [] array={10,100,90,65,80,92}; 6 System.o