zoukankan      html  css  js  c++  java
  • 【算法日记】1.二分查找法

     1 #!/usr/bin/python
     2 # -*- coding: utf-8 -*-
     3 
     4 def binary_search(arr,item):
     5     low=0
     6     hight=len(arr)-1
     7 
     8     print low
     9     print hight
    10     while low<=hight:
    11         print "start>>>>>>>"
    12         mid=(low+hight)/2
    13         guess=arr[mid]
    14         print u"中间位置为",mid
    15         print u"中间值为",guess
    16         if guess==item:
    17             return mid
    18         if guess>item:
    19             print u"猜大了"
    20             hight=mid-1
    21         else:
    22             print u"猜小了"
    23             low=mid+1
    24     return None
    25 
    26 my_list=[1,2,3,4,5,6,7,8,9,10,11,12,14,15,26,55]
    27 
    28 binary_search(my_list,5)

    当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。主要思想是:(设查找的数组区间为array[low, high])

    (1)确定该区间的中间位置K

    (2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:a.array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]b.array[k]<T 类似上面查找区间为array[k+1,……,high]。每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间缩小一半,递归找,即可。时间复杂度:O(log2n)。

  • 相关阅读:
    Generate Parentheses
    Length of Last Word
    Maximum Subarray
    Count and Say
    二分搜索算法
    Search Insert Position
    Implement strStr()
    Remove Element
    Remove Duplicates from Sorted Array
    Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/zimuzimu/p/7082907.html
Copyright © 2011-2022 走看看