8:数组综合-11

8:数组综合-11
时间限制: 4 S | 内存限制: 8192 KB
Accept: 60 | Submit: 116
[提交] [讨论版]
描述
本题请用二分查找法实现。

确定一堆数字中有没有某些特定的值。

注意:数字只有固定的一堆,但是有很多key,每个key都要确定是否出现在这堆数字中。

输入
一个正整数n,表示这堆数字一共n个。然后是n个整数,表示这堆数字具体的值。

接下来是一个正整数m,然后是m个整数,表示需要判断的m个key值。

输出
针对每个key值,如果该key值出现在这n个整数中,则输出true,否则输出false。

每次输出完都要换行。(所以最后应该有m个true或者false)

样例输入
5 1 2 3 4 5

2 10 1

样例输出
false

true

            
#include <iostream>
using namespace std;
void bubbleSort(int a[], int n)
{
	for (int i = 1; i < n; i++)
	{
		bool noChange = true;
		for (int j = 0; j < n - i; j++)
		{
			if (a[j] > a[j + 1])
			{
				swap(a[j], a[j + 1]);
				noChange = false;
			}
		}
		if (noChange)
		{
			break;
		}
	}
}
bool fun(int a[], int key,int n)
{
	bool flag = false;
	int low = 0, high = n - 1, mid;
	while(low<=high)
	{
		mid = (low + high) / 2;
		if (key == a[mid])
		{
			flag = true;
			break;
		}
		else if (key > a[mid])
		{
			low = mid + 1;
		}
		else
		{
			high = mid - 1;
		}
	}
	return flag;
}

int main()
{
	int n,m,key;
	cin >> n;
		int* a = new int[n];
		for (int j= 0; j < n; j++)
		{
			cin >> a[j];
		}
		bubbleSort(a, n);
		cin >> m;
		for (int i = 0; i < m; i++)
		{
			cin >> key;
			bool f = fun(a, key, n);
			if (f)
			{
				cout << "true";
			}
			else
			{
				cout << "false";
			}
			cout << endl;
		}
	return 0;
}

        
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页