简单的优化算法:二分查找

本文介绍了二分查找(折半查找)算法的工作原理及其优势,这是一种在有序数据中快速搜索目标值的优化算法。虽然它需要预先对数据进行排序,但可以显著提高搜索效率。文中提供了一个C++实现的示例代码,演示了如何在排序后的数组中使用二分查找。然而,二分查找的局限性在于其仅适用于已排序的数据集。
摘要由CSDN通过智能技术生成

二分查找,又名折半查找,是一种对于搜索的优化算法
对于大量的数据,如果用普通的暴力搜索就显得非常浪费时间
只要有一个数据就要尝试一次 非常麻烦

于是有一个瓜皮发明出了这样一种算法:
对于一组有序的数据,
找出这组数据的中点,判断要找的数据在它的前边还是后边
这样就能排除一半的数据;
然后把这个中点设为数据的起点或终点(刨除不包含目标的数据)
再找中点,再比较
如此循环往复,能节省一半的时间
妙啊
于是有了如下的代码:

  while(h<=m)
  {
    m=(h+e)/2;
    if(seq[m]==tosearch)
    {
      cout<<"Found match:At No."<<m<<endl;
      return 0;
    }
    else if(seq[m]<tosearch)
    {
      h=m;
    }
    else if(seq[m]>tosearch)
    {
      e=m;
    }
  }
  cout<<"Not match found"<<endl;

这种算法的优点显而易见,省时省空间
但缺点也很明显,它查找的数据必须是有序的
必须能判断中点在目标值的前边或者后边
但大部分数据都不是这样
所以在使用折半查找之前必须先排序
于是完整代码成了这样

#include<bits\stdc++.h>
using namespace std;

int main()
{
  //definition
  int seq[100],i,n,tosearch;
  int h,e,m,temp;
  //input
  cout<<"Please Enter ammount of array"<<endl;
  cin>>n;
  cout<<"Please Enter the array"<<endl;
  for(i=0;i<n;i++)
    cin>>seq[i];
  //sort
  for(int i=0;i<n-1;i++)
  {
  	for(int j=n-1;j>i;j--)
  	{
  		if(seq[j]>seq[j-1])
    	{
  			temp=seq[j];
  			seq[j]=seq[j-1];
  			seq[j-1]=temp;
  		}
  	}
	}
  h=0;
  e=n-1;
  //input integer to search
  cout<<"Please enter a integer to search."<<endl;
  cin>>tosearch;
  //procession
  while(h<=m)
  {
    m=(h+e)/2;
    if(seq[m]==tosearch)
    {
      cout<<"Found match:At No."<<m<<endl;
      return 0;
    }
    else if(seq[m]<tosearch)
    {
      h=m;
    }
    else if(seq[m]>tosearch)
    {
      e=m;
    }
  }
  cout<<"Not match found"<<endl;
  return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值