二分查找算法实现

#include <iostream>
#include<algorithm>
using namespace std;
#define N 20
int  binary_chop(int a[],int n,int j,int k){//二分查找算法
 int low,high,mid;
 low=1;high=n;
 while(low<=high){
  mid=(low+high)/2;         
  if(a[mid]==k) {j=mid;break;}  //找到即返回下标
  else if(a[mid]>k)high=mid-1;  //寻找的值小于中间值,则在左边一般查找
  else low=mid+1;               //寻找的值大于中间值,则在右边一半查找
 }
  return j;                        //返回k的下标值,找不到返回0
}
int main(int argc, char** argv) {
 
 int a[N];
 int n; cin>>n;//定义问题的规模大小,并由用户输入问题规模大小,即数组长度;
 int W;cin>>W;//输入要寻找的数
  for(int i=1;i<=n;i++){
   cin>>a[i];
  }//输入数组元素;
 
 sort(a+1,a+n+1);  //对数组进行排序
 
// for(int i=1;i<=n;i++){           //输出排序后的数组元素,用于检测
//   cout<<a[i];
//  }//输出数组元素;
 
 cout<<binary_chop(a,n,0,W);
 return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,这里给您提供一份基于二分查找算法实现根据员工号查找员工信息的代码,您可以参考一下: ```python class Employee: def __init__(self, emp_id, name, age): self.emp_id = emp_id self.name = name self.age = age class EmployeeDB: def __init__(self): self.employee_list = [] def add_employee(self, emp_id, name, age): emp = Employee(emp_id, name, age) self.employee_list.append(emp) def binary_search(self, emp_id): left = 0 right = len(self.employee_list) - 1 while left <= right: mid = (left + right) // 2 if self.employee_list[mid].emp_id == emp_id: return self.employee_list[mid] elif self.employee_list[mid].emp_id < emp_id: left = mid + 1 else: right = mid - 1 return None ``` 这里我们定义了一个`Employee`类,表示员工信息,其中包含员工号、姓名和年龄等信息。然后定义了一个`EmployeeDB`类,表示员工信息数据库,其中包含添加员工信息和根据员工号查找员工信息的方法。在`binary_search`方法中,我们采用二分查找算法来查找员工信息,如果找到了对应的员工信息,则返回该员工信息,否则返回`None`。 ### 回答2: 二分查找算法是一种在有序数组中快速定位目标值的方法,适用于数据量较大且有序的情况。根据题目要求,我们需要根据员工号来查找员工信息,因此可以使用二分查找算法实现。 首先,我们需要将员工号按照升序排序,这样才能使用二分查找算法。然后,我们可以采取以下步骤来实现根据员工号查找员工信息的功能: 1. 定义一个包含员工号和员工信息的结构体,例如Employee。 2. 声明一个员工数组,并按照员工号的升序进行排序。 3. 定义一个二分查找的函数,传入员工号、员工数组和数组长度作为参数。 4. 在二分查找函数中,设定左边界left为数组起始位置,右边界right为数组结束位置。 5. 进入循环,在循环中判断左边界是否小于等于右边界,如果是,则执行以下步骤: a. 计算中间位置middle,可以通过取(left + right) / 2来实现。 b. 判断员工号是否等于数组中间位置的员工号,如果是,则说明找到了对应的员工信息,直接返回该员工信息。 c. 如果员工号小于数组中间位置的员工号,说明需要在左半部分继续查找,此时将右边界right更新为middle-1。 d. 如果员工号大于数组中间位置的员工号,说明需要在右半部分继续查找,此时将左边界left更新为middle+1。 6. 如果循环结束后仍未找到对应员工信息,说明该员工号不存在,返回相应提示信息。 通过以上步骤,我们可以使用二分查找算法实现根据员工号查找员工信息的功能。该算法具有较高的效率和准确性,适用于大规模员工数据的查找场景。 ### 回答3: 根据题目要求,我们可以使用二分查找算法实现根据员工号查找员工信息。具体步骤如下: 1. 首先,我们需要准备一个按照员工号有序排列的员工信息列表。 2. 确定二分查找算法的边界条件。在这个问题中,我们需要确定查找的范围是什么。假设员工号的最小值为1,最大值为N。那么边界条件可以设置为左边界为1,右边界为N。 3. 计算中间元素的索引。首先,找到左边界和右边界的中间值,可以使用公式 `(left + right) // 2` 来计算。 4. 检查中间元素是否是目标元素。比较中间元素的员工号与目标员工号是否相等。如果相等,则找到了目标员工信息,可以返回。 5. 如果中间元素的员工号小于目标员工号,说明目标员工号在右半部分,更新左边界为中间元素的索引 + 1。 6. 如果中间元素的员工号大于目标员工号,说明目标员工号在左半部分,更新右边界为中间元素的索引 - 1。 7. 重复步骤3到步骤6,直到左边界大于右边界,说明查找失败,员工信息不存在。 8. 返回查找结果。 通过以上步骤,我们可以使用二分查找算法实现根据员工号查找员工信息。由于二分查找算法的时间复杂度为O(logN),在大规模数据集下,效率较高。同时,由于员工号有序排列,可以使用二分查找算法进一步优化查找速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值