简单高效二分查找算法

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

目的:

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

成员:

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位置 未找到
posted @ 2021-02-22 11:43  星仔007  阅读(50)  评论(0编辑  收藏  举报