简单高效二分查找算法

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

目的:

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

成员:

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 @   星仔007  阅读(54)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示