2022-08-03 10:27阅读: 15评论: 0推荐: 0

力扣-704-二分查找

直达链接

猛然发现我做过了,3月4号

回顾前段时间面试的经历,感觉二分查找的出现概率挺大
当然,也大概是因为都是些小公司,考察的还是很基础的算法
写一篇总结一下

二分查找

条件

  1. 必须是有序序列

因为是每次与“中间值”相比较,这个“中间值”既是序列位置的中间值,也是数值大小的中间值

  1. 存储在数组中

实现

排序可以参考快速排序

// 递归实现
//int binarySearch(int sortedArray[],int target, int lowIndex, int highIndex) {
//
// if (lowIndex > highIndex) return -1;
//
// int middle = (highIndex - lowIndex) / 2 + lowIndex;
//
// cout << "当前比较的中数下标是:" <<sortedArray[middle] << endl;
//
// if (sortedArray[middle] == target) {
// return middle;
// }
// else if(sortedArray[middle]>target) {
// binarySearch(sortedArray, target, lowIndex, middle - 1);
// }
// else if (sortedArray[middle] < target) {
// binarySearch(sortedArray, target, middle + 1, highIndex);
// }
//}
// 非递归实现
int binarySearch(int sortedArray[],int target,int length) {
if (sortedArray == nullptr || length <= 0) return -1;
int low = 0;
int high = length - 1;
while (low <= high) {
int middle = (high - low) / 2 + low;
if (sortedArray[middle] == target)
return middle;
else if (sortedArray[middle] > target)
high = middle - 1;
else
low = middle + 1;
}
return -1;
}
int main() {
// int data[] = { 2,9,1,14,39,24,19,5,43 };
int data[30];
int start = 1;
iota(begin(data), end(data), start);
int length = sizeof(data)/sizeof(int);
QuickSort(data, length, 0, length - 1);
printf("原数组:\n");
for (int i : data) {
cout << i << " ";
}
printf("\n");
cout<<"二分查找指定元素的下标为:"<<binarySearch(data,4,0,length-1);
return 0;
}

本文作者:YaosGHC

本文链接:https://www.cnblogs.com/yaocy/p/16545930.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   YaosGHC  阅读(15)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起