精典算法之二分查找法

简介: 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。  二分查找法是已经排好顺序的集合,要从集合的中间开始查找,如果这个项小于我们要查找的数,则这个项前边的所有数都小于我们要查找的对象 就无需再浪费时间去查在前边的数查找;如果搜寻的数天于我们要查找的对象那么这个数的后边的数都大于我们要查找的对象,则后边的数我们也不用再去查找了。
+关注继续查看

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

 二分查找法是已经排好顺序的集合,要从集合的中间开始查找,如果这个项小于我们要查找的数,则这个项前边的所有数都小于我们要查找的对象
 就无需再浪费时间去查在前边的数查找;如果搜寻的数天于我们要查找的对象那么这个数的后边的数都大于我们要查找的对象,则后边的数我们也不用再去查找了。

下边我会用c#和c++两种语言给出代码

c#二分查找代码

 static void Main(string[] args)
        {
            int[] _array={ 1,3,5,6,10,14,16,20,21,23,28};
            int _findValue = BinSearch(_array, 0, _array.Length, 3);
            if (_findValue == -1)
            {
                Console.WriteLine("not find");
            }
            else
            {
                Console.WriteLine("find the value at " + _findValue);
            }
            Console.ReadLine();
        }

        static int BinSearch(int[] _array, int start, int end, int key)
        {
            int left, right;
            int mid;
            left = start;
            right = end;

            while (left <= right)
            {
                mid = (left + right) / 2;

                if (key < _array[mid])
                {
                    right = mid - 1;
                }
                else if (key > _array[mid])
                {
                    left = mid + 1;
                }
                else
                    return mid;
            }
            return -1;
        }

  

c++二分查找代码

int BinSearch(const int* Array,int start,int end,int key)
{
	int left,right;
	int mid;
	left=start;
	right=end;
	
	while(left<=right)
	{
		mid = (left + right)/2;

		if(key < Array[mid])
		{
			right = mid - 1;
		}
		else if(key > Array[mid])
		{
			left = mid + 1;
		}
		else
			return mid;
	}
	return -1;
}

int main(int argc,char* argv[])
{
	int _array[11] ={ 1,3,5,6,10,14,16,20,21,23,28};

	int _findInt =BinSearch( _array,0,(sizeof _array)/(sizeof _array[0]),3);
	if(_findInt == -1)
	{
		cout<<"not find"<<endl;
	}
	else
	{
		cout<<"find the Value at  "<<_findInt<<endl;
	}
	
	 return 0;
}

  

目录
相关文章
|
2月前
|
算法
建筑抢修 (大根堆+贪心+优先队列+快速排序+2重思想比较)
建筑抢修 (大根堆+贪心+优先队列+快速排序+2重思想比较)
10 0
|
3月前
【八大排序(四)】快排-到底多快才能追上奔驰车里的夏树?(下)
【八大排序(四)】快排-到底多快才能追上奔驰车里的夏树?(下)
【八大排序(四)】快排-到底多快才能追上奔驰车里的夏树?(下)
|
3月前
【八大排序(四)】快排-到底多快才能追上奔驰车里的夏树?(上)
【八大排序(四)】快排-到底多快才能追上奔驰车里的夏树?
|
4月前
|
搜索推荐
图解:快速排序算法之双边循环法
之前我们学习了冒泡排序,有没有比冒泡排序更快的排序算法呢?当然有,例如快速排序,归并排序,堆排序。接下来即将介绍的快速排序就是由冒泡排序演变而来的。
59 0
图解:快速排序算法之双边循环法
|
6月前
|
缓存 NoSQL 算法
一日一技:二分偏左,二分搜索在分布式系统里面也有用?
一日一技:二分偏左,二分搜索在分布式系统里面也有用?
43 0
|
9月前
|
算法
算法排序问题。每种排序代表着没中思考问题的方式。我们学习了选择排序,冒泡排序,归并排序。让我们去回顾回顾吧。重在思想的领悟。
算法排序问题。每种排序代表着没中思考问题的方式。我们学习了选择排序,冒泡排序,归并排序。让我们去回顾回顾吧。重在思想的领悟。
52 0
算法排序问题。每种排序代表着没中思考问题的方式。我们学习了选择排序,冒泡排序,归并排序。让我们去回顾回顾吧。重在思想的领悟。
|
9月前
|
存储 算法 索引
【每日挠头算法题】LeetCode 1337. 矩阵中战斗力最弱的 K 行 —— 二分 + 排序 / 堆
【每日挠头算法题】LeetCode 1337. 矩阵中战斗力最弱的 K 行 —— 二分 + 排序 / 堆
66 0
【每日挠头算法题】LeetCode 1337. 矩阵中战斗力最弱的 K 行 —— 二分 + 排序 / 堆
|
9月前
|
算法 搜索推荐
算法笔记(二)——快排,归并算法(做成模板题)
算法笔记(二)——快排,归并算法(做成模板题)
算法笔记(二)——快排,归并算法(做成模板题)
|
11月前
|
存储 算法 Java
算法学习入门Day3_lecode_88 合并两个有序数组,哦 上帝。
算法学习入门Day3_lecode_88 合并两个有序数组,哦 上帝。
算法学习入门Day3_lecode_88 合并两个有序数组,哦 上帝。
|
机器学习/深度学习 算法 测试技术
算法与数据结构全阶班-左程云版(二)基础阶段之1.复杂度、对数器、二分法和异或运算(下)
本文主要介绍了数据结构与算法的基本概念,包括算法评价指标、复杂度、对数器、二分法和异或运算。
算法与数据结构全阶班-左程云版(二)基础阶段之1.复杂度、对数器、二分法和异或运算(下)
相关产品
云迁移中心
推荐文章
更多