数据结构与算法-二分查找

二分查找(折半查找)算法
顺序查找表的查找算法简单, 但平均查找长度较 大,特别不适用于表长很长的查找表。
有序表 :  查找表的元素已按从小到大的顺序排列。
若以有序表表示静态查找表,则查找过程可以基于“ 折半查找 ”(又称为“ 二分查找 ”)法进行。
#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;

	}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值