zoukankan      html  css  js  c++  java
  • 数据结构-二分查找(折半查找)

    算法简介

    二分查找也称折半查找(Binary Search),多数的人喜欢叫他二分查找。它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列,注意必须要是有序排列。

    具体计算

    二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.

    具体代码如下:(phthon)

    • 方式1
    def serach(ls, left, right, target):
        mid = (left + right) // 2
        if left > right:
            return "-1"
        if target == ls[mid]:
            return mid
        elif target > ls[mid]:
            left = mid + 1
        elif target < ls[mid]:
            right = mid - 1
        else:
            return "-1"
        return serach(ls, left, right, target)
    def main():
        """主函数"""
        my_list = [1, 3, 5, 7, 10,34,56,76,89]  # 有序列表
        num = 34  # 要猜测的数字
        print(search(my_list, 0, len(my_list)-1, num))
    if __name__ == '__main__':
        main()
    
    • 方式2
    """
    二分算法
    :param my_list: 有序列表
    :param num: 要查找的元素
    :return: 存在返回下标 不存在返回NONE
    """
    def binarySearch(my_list,findvalue):
        left = 0
        right = len(my_list) - 1
        #print(right)
        #print(findvalue)
        while left<=right:
            mid=int((left+right)/2)
            if my_list[mid]==findvalue:
                return mid
            if my_list[mid]<findvalue:
                left=mid+1
            if my_list[mid]>findvalue:
                right=mid-1
        return None
    def main():
        """主函数"""
        my_list = [1, 3, 5, 7, 10,34,56,76,89]  # 有序列表
        num = 34  # 要猜测的数字
        print(binarySearch(my_list, num))
    if __name__ == '__main__':
        main()
    
  • 相关阅读:
    数据结构之排序查找算法
    Spring3之IOC
    SQL使用范例
    数据结构之链表操作
    VI的使用
    数据结构之树的操作
    Hibernate学习笔记
    Spring3之AOP
    01.由一个程序开始(一)
    Linux的档案权限及目录配置(一) (2)
  • 原文地址:https://www.cnblogs.com/sjkzy/p/15031076.html
Copyright © 2011-2022 走看看