算法:改写二分搜索算法
2017-09-27 19:16
260 查看
设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。问题来源:题目来源:《计算机算法设计与分析》王晓东
输入格式:
输入有两行:
第一行是n值和x值; 第二行是n个不相同的整数组成的非降序序列,每个整数之间以空格分隔。
输出格式:
输出小于x的最大元素的最大下标i和大于x的最小元素的最小下标j。当搜索元素在数组中时,i和j相同。 提示:若x小于全部数值,则输出:-1 0 若x大于全部数值,则输出:n-1的值 n的值
输入样例:
在这里给出一组输入。例如:
6 5
2 4 6 8 10 12
输出样例:
在这里给出相应的输出。例如:
1 2
输入格式:
输入有两行:
第一行是n值和x值; 第二行是n个不相同的整数组成的非降序序列,每个整数之间以空格分隔。
输出格式:
输出小于x的最大元素的最大下标i和大于x的最小元素的最小下标j。当搜索元素在数组中时,i和j相同。 提示:若x小于全部数值,则输出:-1 0 若x大于全部数值,则输出:n-1的值 n的值
输入样例:
在这里给出一组输入。例如:
6 5
2 4 6 8 10 12
输出样例:
在这里给出相应的输出。例如:
1 2
#include<iostream> using namespace std; int BIN(int a[], int key, int n) { int left = 0; int right = n - 1; int i = 0; int j = 0; while (left <= right) { int middle = (left + right) / 2; if (key == a[middle]) { i = j = middle; cout << i <<" "<<j<<endl; //cout << t; return middle; } if (key > a[middle])left = middle + 1; else { right = middle - 1; } } i = right; j = left; cout << i<<" "<< j<<endl; return -1; } int main() { int n; int x; cin >> n>> x; int *a = new int ; for (int i = 0; i < n; i++) { cin >> a[i]; } BIN(a, x, n); system("pause"); }
相关文章推荐
- 改写二分搜索算法
- 2-3 改写二分搜索算法
- 算法分析与设计-03-二分搜索算法
- 人工智能你必须掌握的32个算法(一)二分搜索算法
- 改写二分搜索算法
- 算法系列:二分搜索算法
- 二分查找算法和二分查找函数bsearch
- HDU2444 The Accomodation of Students(二分匹配 匈牙利算法)
- ZOJ Flower (二分+网络流sap 算法)
- 二分搜索算法
- 二分算法分田地
- 【打CF,学算法——三星级】CodeForces 645C Enduring Exodus (二分+贪心)
- 直通BAT--数据结构与算法六(二分搜索)
- 二分算法模板
- 算法之图搜索算法(一)
- 算法 查找算法--二分查找
- 二分图匹配匈牙利算法(poj1469验证)
- 简单的二分算法分析(循环的条件)
- 基本算法连载(1)-顺序搜索与二分搜索
- 二分算法(如果要查找的数不存在返回比该值小的最大值)