顺序查找与二分查找

1.问题

在一个排好顺序的数组中查找x,如果x在该数组中,则输出其下标,否则输出0。使用顺序查找的二分查找来分别完成

2.解析

顺序查找是对每一个数进行比较,直到找到该数,或者遍历以后未找到则输出0.
二分查找是在数组有序的前提下,通过查找中间数,并与待查数比较以减小区间的方式,来找到该数。

3.设计

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
#define number 10000
int comp(const void* p, const void* q) {
	return (*reinterpret_cast<const int*>(p) - *reinterpret_cast<const int*>(q));
}
int main() {
	int a[number], i, j, k, n;
	srand(time(NULL));
	for (i = 0; i < number; i++) {
		a[i] = rand();
	}
	n = rand();
	qsort(a, number, sizeof(int), comp);
	//顺序查找
	for (i = 0; i < number; i++) {
		if (a[i] == n) {
			break;
		}
	}
	if (i == number) {
		cout << 0 << endl;
	}
	else {
		cout << i + 1 << endl;
	}
	//二分查找
	i = 0;
	j = number-1;
	while (i <= j) {
		k = (i + j) / 2;
		if (n == a[k]) {
			break;
		}
		else if (n < a[k]) {
			j = k - 1;
		}
		else {
			i = k + 1;
		}
	}
	if (i > j) {
		cout << 0 << endl;
	}
	else {
		cout << k + 1 << endl;
	}
}

4.分析

顺序查找复杂度:O(n) 二分查找复杂度:O(logn)

5.源码

https://github.com/BeFlamingo/faming3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值