• 经典算法之二分查找


    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
  • 相关阅读:
    斐波那契数列的递归和非递归实现
    二叉树遍历
    基础总结
    内部类
    I/O dempo
    读取文件注意事项
    eclipse 主题设置
    String 常用函数
    多态的理解
    ffmpeg处理RTMP流媒体的命令大全
  • 原文地址:https://www.cnblogs.com/webDepOfQWS/p/10663864.html
Copyright © 2020-2023  润新知