c语言二分查找的实现
发表于:2024-12-01 作者:千家信息网编辑
千家信息网最后更新 2024年12月01日,二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。通常在查找数组的时候,会发现一个一个查找很浪
千家信息网最后更新 2024年12月01日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安全错误
数据库的锁怎样保障安全
网络安全内部边界
开源音乐服务器部署
软件开发行业怎么做账
assess数据库怎么设置性别
怎么查上市前的数据库
数据库的需求分析指的是
云服务器显示屏幕太小
济南软件开发工资一般多少知乎
中文技术期刊数据库期刊号
网络安全有关二维码
网络安全设备功能介绍
nds游戏自建服务器
恶魔之魂卡在连接服务器
珠海市互联网科技公司
查找 不可用 无法连接服务器
影响网络安全的主要因素
数据库日志调用
网络技术公司行业性质
简述电子商务数据库
is语音软件开发公司
大数据 vs 传统数据库
高中信息技术 数据库说课稿
逛淘宝时网络安全验证
服务器常见的安全设施
信息网络技术发展的方向是
网络安全保护系统分为几级
长春盘古网络技术公司怎么样
广东服务器散热风扇价格
酒店点餐系统课程设计数据库
计算机网络技术专科月薪多少