编程之美3-11程序改错
2017-02-24 21:33
253 查看
二分查找你针对有序序列而言的一种查找算法,关于二分查找有一下的几类问题:
1. 给定一个有序(不降序)数组arr,求任意一个i使得arr[i]等于v,不存在则返回-1
2.给定一个有序(不降序)数组arr,求最小的i使得arr[i]等于v,不存在则返回-1
3.给定一个有序(不降序)数组arr,求最大的i使得arr[i]等于v,不存在则返回-1
4.给定一个有序(不降序)数组arr,求最大的i使得arr[i]小于v,不存在则返回-1
5.给定一个有序(不降序)数组arr,求最小的i使得arr[i]大于v,不存在则返回-1
1. 给定一个有序(不降序)数组arr,求任意一个i使得arr[i]等于v,不存在则返回-1
#include <iostream> using namespace std; int binarySearch(int A[], int left, int right, int t) { int m; while(left <= right){ m = left + (right - left) / 2; if(A[m] < t) left = m + 1; else if(A[m] > t) right = m - 1; else return m; } return -1; } int main() { int A[] = {1,2,2,2,3,4,5,6,7}; cout << binarySearch(A, 0, 8, 2); return 0; }
2.给定一个有序(不降序)数组arr,求最小的i使得arr[i]等于v,不存在则返回-1
#include <iostream> using namespace std; int binarySearch(int A[], int left, int right, int t) { int m; while(left < right){ m = left + (right - left) / 2; if(A[m] < t) left = m + 1; else if(A[m] > t) right = m - 1; else right = m; } if(A[right] == t) return right; else if(A[left] == t) return left; else return -1; } int main() { int A[] = {2,3}; cout << binarySearch(A, 0, sizeof(A) / sizeof(A[0]) - 1, 3); return 0; }
3.给定一个有序(不降序)数组arr,求最大的i使得arr[i]等于v,不存在则返回-1
#include <iostream> using namespace std; int binarySearch(int A[], int left, int right, int t) { int m; while(left < right - 1){ m = left + (right - left) / 2; if(A[m] < t) left = m + 1; else if(A[m] > t) right = m - 1; else left = m; } if(A[right] == t) return right; else if(A[left] == t) return left; else return -1; } int main() { int A[] = {2,3}; cout << binarySearch(A, 0, sizeof(A) / sizeof(A[0]) - 1, 3); return 0; }
4.给定一个有序(不降序)数组arr,求最大的i使得arr[i]小于v,不存在则返回-1
5.给定一个有序(不降序)数组arr,求最小的i使得arr[i]大于v,不存在则返回-1
相关文章推荐
- 编程之美-程序改错及扩展问题
- 二分查找 编程之美3.11 程序改错
- 读林锐博士 高质量C++/C编程指南 笔记 2006-11-15第二章程序的版式
- 黑马程序员-DOM编程基础知识练习程序(11-17)
- 编程之美-程序改错方法整理
- 修改11—1的程序编程instanceof
- 编程之美-程序改错及扩展问题
- UNIX环境高级编程中的11章程序11-2编译问题---undefined reference to `pthread_create'
- 我与python约个会:11程序编程基础5:输入输出
- 11-22C/C++/python程序编程
- 读书笔记之编程之美 - 3.11 程序改错
- 编程之美,3.11程序改错, 二分扩展
- [编程之美] PSet3.11 程序改错:二分查找与扩展
- unix环境高级编程 程序3-11(fileflags.c)全面解析
- BBS程序设计4--基本编程思路
- 经典c程序100例==11--20
- Net中的socket编程—聊天程序
- ASP编程入门进阶(二十):ADO组件之分页程序
- Win32编程--(VC7下Dialog-based程序的构建)
- 编程高手有很多只是编程老手,因为他比你熟悉编码,比你了解整体运行架构,比你迅速找出程序中的Bug,高手只是高在经验积累得比你多比你纯熟而已,那种传说中的高手是少之又少的。