查找-折半查找与插值查找

 1 #include "stdafx.h"
 2 #include <iostream>
 3 #include <exception>
 4 #include<string>
 5 using namespace std;
 6 
 7 
 8 /*有序表查找-折半查找
 9 折半查找有称为二分查找,线性表中的记录必须是关键码有序,通常是从小到大
10 线性表必须采用顺序存储.
11 基本思想:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;
12 若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,
13 则在中间记录的右半区继续查找。不断重复上述过程.直到找到成功,或所有查找区域无记录,查找失败.
14 */
15 
16 int Binary_Search(int *a,int n,int key)
17 {
18     int low,high,mid;
19     low = 0;
20     high = n-1;
21     while(low<=high)
22     {
23         mid = (low+high)/2;
24         if(a[mid]>key)
25         {
26             high = mid-1;
27         }
28         else if(a[mid]<key)
29         {
30             low = mid+1;
31         }
32         else
33             return mid+1;
34     }
35     return -1;
36 }
37 
38 int _tmain(int argc, _TCHAR* argv[])
39 { 
40     int nums[5]={1,2,3,4,5};
41 
42     cout<<Binary_Search(nums,5,2);//返回数字在数组中的位置,为2
43 
44     return 0 ;
45 }

 另外,为什么一定要是折半而不是折四分之一或者折更多呢?

mid = (low+high)/2 =  low + (high-low)/2;

在这里如果将

mid 改为  mid = low + (high - low) *(key - a[low])/(a[high]-a[low]);//这就是插值

时间复杂度,也是O(logn),但是对于表长较大,而关键字分布又比较均匀的查找表来说,插值查找算法的平均性能比折半查找要好很多.

但是,如果数组中分布类似{0,1,2,2000,2001,......,999998,999999)这种极端不均匀的数据,用插值查找未必就很合适了.

转载于:https://www.cnblogs.com/crazycodehzp/p/3550599.html

基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应的权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集中的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机会。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的转型,为管理决策和控制提供保障,是行业发展中的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值