力扣-704-二分查找
直达链接
猛然发现我做过了,3月4号
回顾前段时间面试的经历,感觉二分查找的出现概率挺大
当然,也大概是因为都是些小公司,考察的还是很基础的算法
写一篇总结一下
二分查找
条件
- 必须是有序序列
因为是每次与“中间值”相比较,这个“中间值”既是序列位置的中间值,也是数值大小的中间值
- 存储在数组中
实现
排序可以参考快速排序
// 递归实现 //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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步