二分查找的优点就一个字,快!但缺点就是要先排好序才能二分查找。
思路:假设数据是按升序排序的,对于给定值n,从序列的中间位置mid开始比较,
如果当前位置arr[mid]值等于n,则查找成功;
若n小于当前位置值arr[mid],则在数列的前半段中查找,arr[left,mid];
若n大于当前位置值arr[mid],则在数列的后半段中继续查找arr[left+1,right],
下面给个例题,
输入格式:
测试数据有多组,处理到文件尾。每组测试数据第一行输入一个整数n(1≤n≤100),第二行输入n个各不相同的待排序的整数,第三行是查询次数m(1≤m≤100),第四行输入m个待查找的整数。
输出格式:
对于每组测试,分2行输出,第一行是排序后的升序的结果,每两个数据之间留一个空格;第二行是查找的结果,若找到则输出排序后元素的位置(从1开始,每两个数据之间留一个空格),否则输出0。
输入样例:
9
4 7 2 1 8 5 9 3 6
5
10 9 8 7 -1
输出样例:
1 2 3 4 5 6 7 8 9
0 9 8 7 0
代码如下:
#include<bits/stdc++.h>
using na