二分查找(折半查找)算法
顺序查找表的查找算法简单, 但平均查找长度较 大,特别不适用于表长很长的查找表。
有序表
: 查找表的元素已按从小到大的顺序排列。
若以有序表表示静态查找表,则查找过程可以基于“
折半查找
”(又称为“
二分查找
”)法进行。
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <Windows.h> // 包含头文件
using namespace std;
int mid_reset(int left,int right) { return (right + left) / 2; }
int main() {
srand(time(0));
int time = 0;
//二分查找
while (1) {
int n = 100000, x;
int* arr = new int[n];
//输入数组
for (int i = 0; i < n; i++) arr[i] = i;
int left = 0;
int right = n - 1;
int mid = mid_reset(right, left);
//输入查找目标x
x = rand() % 100000;
cout << "x = " << x << endl;
while (left < right) {
if (arr[mid] > x) {
right = mid - 1;
}
else if (arr[mid] < x) {
left = mid + 1;
}
else break;
mid = mid_reset(right, left);
cout << "mid = " << mid << endl;
}
if(x == mid){
cout<<"yes " << mid << endl;
}
else {
cout << "no x = " << x << " mid = " << mid << endl;
break;
}
Sleep(10);
time++;
if (time > 500) break;
}
}