讨论1.5 分析“二分法”

时间:2019-04-19
本文章向大家介绍讨论1.5 分析“二分法”,主要包括讨论1.5 分析“二分法”使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

目录

1.题目

2.分析过程

3.源代码

4.运行结果


1.题目

    查找算法中的“二分法”是这样定义的:

    给定N个从小到大排好序的整数序列List[],以及某待查找整数X,我们的目标是找到X在List中的下标。即若有List[i]=X,则返回i;否则返回-1表示没有找到。

    二分法是先找到序列的中点List[M],与X进行比较,若相等则返回中点下标;否则,若List[M]>X,则在左边的子系列中查找X;若List[M]<X,则在右边的子系列中查找X。

    试写出算法的伪码描述,并分析最坏、最好情况下的时间、空间复杂度。

2.分析过程

3.源代码

#include <iostream>
using namespace std;
int binarySearch(int list[], int x, int n);
int main()
{
	int a[]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
	int x;
	cout << "请输入要查找的数字x\n";
	cin >> x;
	int n = sizeof(a) / sizeof(a[0]);
	int index = binarySearch(a, x, n);
	if (index != -1)
		cout << "下标为:" << index << endl;
	else
		cout << "没有找到" << x << "的值" << endl;
	system("pause");
	return 0;
}

int binarySearch(int list[], int x, int n)
{
	int low, high, now;
	low = 0;
	high = n-1;
	now = (low+high) / 2;
	while (high >= low)
	{
		if (list[now] == x)
			return now;
		else if (list[now] > x)
			high = now - 1;
		else
			low = now + 1;
		now = (high + low) / 2;
	}
	return -1;
}

4.运行结果