Loading

经典算法之二分查找

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

 

posted @ 2019-04-07 01:12  秦无殇  阅读(334)  评论(2编辑  收藏  举报