【数据结构】二分查找
🚩 WRITE IN FRONT 🚩
- 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎
- 🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博主、CSDN专家博主、华为云享专家、阿里云专家博主、掘金优秀创作者、全网粉丝量8w+、个人社区人数累计4w+、全网访问量100w+ 🏅
- 🆔 本文章内容由 謓泽 原创 如需相关转载请提前告知博主 ⚠
- 📑 创作时间:2022 年 11 月 2 日 📅
- 📝 个人主页:謓泽的博客 📃
- 📣 专栏系列:数据结构_謓泽的博客-CSDN博客📃
- 🙌 Gitee:謓泽 (wsxsx) - Gitee.com ⭐️
- 🎁 点赞👍+ 收藏⭐️+ 留言📝
✉️ 我们并非登上我们所选择的舞台,演出并非我们所选择的剧本 📩
概述
二分查找,也称为折半查找,是一种在有序数组中快速查找特定元素的算法。它的原理是通过将数组分成两半,并与目标元素进行比较,从而确定目标元素在哪一半中,然后再在该半部分继续进行二分查找,直到找到目标元素或确定目标元素不存在为止。
注意,二分查找使用的场合是要在有序数组的条件下进行的。
题目内容
在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回负一的值。
函数格式
int bin_search(int arr[], int left, int right, int key) // arr 是查找的数组 //left 数组的左下标 //right 数组的右下标 //key 要查找的数字
代码
说明:在这里我们一共有两种方式去对题目的要求进行实现。
① 遍历方法
② 二分查找方法
所以:接下来謓泽都会用这两种方式带大家去实现。
#pragma warning(disable:6031) #pragma message("二分查找法查找k的元素下标是否存在") #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main(void) { #if 1 //注意:在数据结构当中二分查找的时间复杂度的算法是:O(logn) int k = 0; printf("请输入k的元素值:"); scanf("%d", &k); int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int sz = sizeof(arr) / sizeof(arr[0]); int left = 0; int right = sz - 1; while (left <= right) { int mid = (left + right) / 2; if (arr[mid] < k) { left = mid + 1; } else if (arr[mid] > k) { right = mid - 1; } else { printf("找到了,数组下标:%d,元素%d\n", mid, arr[mid]); break; } } if (left > right) { printf("找不到!\n"); } #else // 遍历方式 int i = 0; int k = 7; int flag = 0; int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int sz = sizeof(arr) / sizeof(arr[0]); for (i = 0; i < sz; i++) { if (k == arr[i]) // 去比较下标 { flag = 1; // 找到了 printf("下标:%d\n", arr[i]); } } if (flag == 0) printf("没找到!\n"); #endif return 0; }