c语言二分查找的实现
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。通常在查找数组的时候,会发现一个一个查找很浪
千家信息网最后更新 2025年01月25日c语言二分查找的实现
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
通常在查找数组的时候,会发现一个一个查找很浪费资源,因此通过二分查找法实现 。
算法要求:
1.必须采用顺序存储结构。
2.必须按关键字大小有序排列。
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
(上面是思维导图)
#include#include //while、do while 、goto、for、递归void digui(int shang,int xia,int zhong,int num){ zhong = (shang + xia) / 2; if (shang <= xia) { if (num == zhong) { printf("递归:find.%d\n", zhong); return; } else if (num < zhong) { xia = zhong - 1; printf("shang.%d,zhong.%d,xia.%d \n", shang, zhong, xia); } else { shang = zhong + 1; printf("shang.%d,zhong.%d,xia.%d \n", shang, zhong, xia); } } return;}int main(){ int a[1024]; for (int i = 0; i<1024; i++) { a[i] = i; //printf("%d\n",a[i]); } int shang = 0; int xia = 1023; int zhong = (shang + xia) / 2; int num = 102; while (shang <= xia)//一、while { zhong = (shang + xia) / 2; if (num == zhong) { printf("while:find.%d\n", zhong); break; } else if (num < zhong) { xia = zhong - 1; printf("shang.%d,zhong.%d,xia.%d \n", shang, zhong, xia); } else { shang = zhong + 1; printf("shang.%d,zhong.%d,xia.%d \n", shang, zhong, xia); } } printf("==================\n"); printf("==================\n"); printf("==================\n"); shang = 0; xia = 1023; zhong = (shang + xia) / 2; num = 102; do {//二、do while zhong = (shang + xia) / 2; if (num == zhong) { printf("do while:find.%d\n", zhong); break; } else if (num < zhong) { xia = zhong - 1; printf("shang.%d,zhong.%d,xia.%d \n", shang, zhong, xia); } else { shang = zhong + 1; printf("shang.%d,zhong.%d,xia.%d \n", shang, zhong, xia); } } while (xia>=shang); printf("==================\n"); printf("==================\n"); printf("==================\n"); shang = 0; xia = 1023; zhong = (shang + xia) / 2; num = 988;AAA://三、goto zhong = (xia + shang) / 2; if (num == zhong) { printf("goto:find.%d\n", zhong); goto BBB; } else if (num > zhong) { shang = zhong + 1; printf("shang.%d,zhong.%d,xia.%d \n", shang, zhong, xia); } else { xia = zhong - 1; printf("shang.%d,zhong.%d,xia.%d \n", shang, zhong, xia); } if (shang<=xia) { goto AAA; }BBB: printf("==================\n"); printf("==================\n"); printf("==================\n"); shang = 0; xia = 1023; zhong = (shang + xia) / 2; num = 288; for (int i; shang <= xia ;zhong = (shang + xia) / 2) { if (num == zhong) { printf("for:find.%d\n", zhong); break; } else if (num < zhong) { xia = zhong - 1; printf("shang.%d,zhong.%d,xia.%d \n", shang, zhong, xia); } else { shang = zhong + 1; printf("shang.%d,zhong.%d,xia.%d \n", shang, zhong, xia); } } printf("==================\n"); printf("==================\n"); printf("==================\n"); shang = 0; xia = 1023; zhong = (shang + xia) / 2; num = 288; digui(shang,xia,zhong,num); //递归 getchar(); getchar(); Sleep(5000); return 0;}
关键
关键字
成功
位置
递归
有序
元素
结构
顺序
进一
存储
两个
升序
大小
思维
效率
数组
方法
时候
条件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全信息化编辑
酒泉市网络安全作业登录入口
服务器ddr4 品牌
互联网公司科技创新榜单
数据库第三方审计系统
小米服务器管理员密码
网络安全与信息化座谈会
ibm服务器质保几年
集成测试中客户服务器集成的特点
计算机网络技术中加合作好吗
浪潮服务器产品
网络技术成长过程
网络安全ka
dba数据库管理员要求
vr建筑设计软件开发
电信服务器中标企业
服务器地址的意思
知网怎么进优秀硕士论文数据库
计算机网络技术包含两个
1.8.9服务器地址
《无线网络安全》
雅安软件开发公司电话
郑州型男网络技术服务公司
服务器操作系统的内核
vb 循环读取数据库数据
大连dns服务器地址
门店网络安全问题有哪些
花点爱互联网科技公司
软件开发在武汉工资
h1z1哪个是北美服务器