
C语言 - 有序数组查找数字
发布日期:2021-05-07 10:11:56
浏览次数:19
分类:原创文章
本文共 968 字,大约阅读时间需要 3 分钟。
1:
#include<stdio.h>int main(){ int arr[] = { 1,2,3,4,5,6,7,8,9,10}; int k = 7;//要查找的数字 int i = 0; int sz = sizeof(arr)/sizeof(arr[0]);//数组元素个数 for(i=0; i<sz; i++)//遍历数组 { if(arr[i] == k) printf("要查找的数字的下标是%d\n", i); } return 0;}
2:
使用二分查找法(折半查找)优化代码
算法思想:
二分查找是针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0
时间复杂度log2^n 要计算2^32个数据只要32次
具体步骤
1.确定左右下标
2.确定中间元素的下标
3.如果中间元素<要查找的数,则排除中间元素的左部分,重新确定左下标;
如果中间元素>要查找的数,则排除中间元素的右部分,重新确定右下标;
4.整体需要不断的循环去排除数据,直到左下标<=右下标
#include<stdio.h>int main(){ int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int k = 7;//要查找的数字 int sz = sizeof(arr)/sizeof(arr[0]); int left = 0;//左下标 int right = sz-1;//右下标 = 元素个数-1 while(left <= right) { int mid = (left+right)/2;//确定中间下标 if(arr[mid] < k) { left = mid + 1;//因为arr[mid]<k,所以排除arr[mid] } else if(arr[mid]>k) { right = mid - 1; } else { printf("找到了,下标是%d\n", mid); break; } } if(left > right) { printf("找不到\n"); } return 0;}
发表评论
最新留言
不错!
[***.144.177.141]2025年03月15日 01时10分23秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
大佬龟叔写的一个无聊程序
2019-03-04
linux 下安装kolla报错 提示Cannot uninstall requests
2019-03-04
Linux MySQL的socket文件存在位置更改
2019-03-04
Linux RPM和yum命令的使用技巧
2019-03-04
写博客常用的字体颜色(待续)
2019-03-04
C++ throw、try、catch、noexcept
2019-03-04
vim之vim滚屏与跳转
2019-03-04
C指针之函数指针与typedef
2019-03-04
CentOS8 字体大小调整
2019-03-04
设计模式之组合模式
2019-03-04
设计模式之外观模式
2019-03-04
Linux 验证、数字证书、RPM包中文件的提取
2019-03-04
《Redis开发与运维》阅读笔记:键管理之单个键管理
2019-03-04
(恋上数据结构笔记):优先级队列(Priority Queue)
2019-03-04
(Python学习笔记):条件语句
2019-03-04
(Python学习笔记):字典
2019-03-04
(C++11/14/17学习笔记):并发基本概念及实现,进程、线程基本概念
2019-03-04
(C++11/14/17学习笔记):线程启动、结束,创建线程多法、join,detach
2019-03-04
(C++11/14/17学习笔记):创建多个线程、数据共享问题分析及案例
2019-03-04