zoukankan      html  css  js  c++  java
  • 简单高效二分查找算法

    首先介绍下对二分查找算法的理解:

    目的:

    从一组有序序列中查找一给定数的位置。

    成员:

    1.有序序列,假定为数组。

    2.任意数

    思路:

    1.取数组中间的数与给的任意数做比较,

    2.如果中间数大于任意数,则以中间数为分界一分为二,取左边做新的数组,右边的丢掉。

    拿新的数组和任意数重复1的操作。

    3.如果中间数小于任意数,则以中间数为分界一分为二,取右边做新的数组,左边的丢掉。

    拿新的数组和任意数重复1的操作。

    python代码如下:

    def binary_search(arr,item):
        low=0
        high=len(arr)-1
        
        while low<=high:
            mid = int((high+low) / 2)
            guess = arr[mid]
            if guess == item:
                return mid
            if guess > item:
                high=mid-1
            else:
                low=mid+1
        return None
    my_list = [1,3,5,7,9]
    
    print (binary_search(my_list,3))
    print(binary_search(my_list,-1))

    运行结果:

    1
    None

     C#代码如下:

    using System;
    
    namespace BinarySearch
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] arr = new int[] { 1, 3, 5, 7, 9 };
                var result = Search(arr, 3);
                ShowMessage(result);
                result = Search(arr, -1);
                ShowMessage(result);
                Console.Read();
            }
            private static void ShowMessage(int result)
            {
                Console.WriteLine($"result位置 " + (result == -1 ? "未找到" : result.ToString()));
            }
            static int Search(int[] arr,int item)
            {
                int low=0,mid=0, high = arr.Length - 1;
    
                while(low <= high)
                {
                    mid = (high + low) / 2;
                    if (arr[mid] == item)
                        return mid;
                    if (arr[mid] > item)
                        high = mid - 1;
                    else if(arr[mid] < item)
                        low = mid + 1;
                    else
                        return -1;
                }
                return -1;
            }
        }
    }

    运行结果:

    result位置 1
    result位置 未找到
    Fork me on GitHub
  • 相关阅读:
    水木→函数式编程语言→lisp是不是主要用来编网站的?
    OpenMP 维基百科,自由的百科全书
    一个实际的Lisp项目开发心得 albert_lee的产品技术空间 博客频道 CSDN.NET
    ...
    OpenMPI
    Debian下安装NetBeans
    Linux Socket学习(十七)
    Linux Socket学习(十四)
    Debian下安装Latex
    Debian下安装virtualbox
  • 原文地址:https://www.cnblogs.com/morec/p/10048984.html
Copyright © 2011-2022 走看看