二分查找

来源:互联网 发布:怎么买特价机票知乎 编辑:程序博客网 时间:2024/06/05 17:18

参照算法笔记P126


#include<stdio.h>//普通二分 int binarySearch(int A[],int left,int right,int x){//[0,n-1]int mid;while(left<=right){mid=(left+right)/2;if(A[mid]==x){return mid;}else if(A[mid]>x){right=mid-1;}else{left=mid+1;}}}//第一个大于等于x的位置 int lower_bound(int A[],int left,int right,int x){//[0,n]int mid;while(left<right){//left==right 意味着找到 唯一 位置 mid=(left+right)/2;if(A[mid]>=x){right=mid;}else{left=mid+1;}}return left;}//第一个大于x的位置 int upper_bound(int A[],int left,int right,int x){//[0,n]int mid;while(left<right){//left==right 意味着找到 唯一 位置 mid=(left+right)/2;if(A[mid]>x){right=mid;}else{left=mid+1;}}return left;}//lower_bound与 upper_bound相比,只是把 A[mid]>=x改成A[mid]>x,其他相同 int main(){int A[]={1,2,3,4,5,6,7,7,8};printf("%d\n",binarySearch(A,0,8,7));//6printf("%d\n",lower_bound(A,0,9,7));//6printf("%d\n",upper_bound(A,0,9,7));//8}