左旋数组中二分查找

来源:互联网 发布:平价护手霜 知乎 编辑:程序博客网 时间:2024/04/30 08:26
#include <stdio.h>#include <stdlib.h>int binary_search_in(int a[], int n, int x){int left = 0;int right = n-1;while(left <= right){int mid = left + ((right - left)>>1);if(a[mid] == x)return mid;if(a[mid] >= a[left])   //左边有序{if(x < a[mid] && x >= a[left]){right = mid - 1;}else{left = mid + 1;}}else    //右边有序{if(x > a[mid] && x <= a[right]){left = mid + 1;}else{ right = mid - 1;}}}return -1;}int main(){int a[] = {9,10,15,1,3,7};printf("%d",binary_search_in(a, 6, 10) );system("pause");}

先检查mid是否相同,否则的话,mid左右至少有一个有序区域,然后在有序区域中的查找是否存在。
0 0
原创粉丝点击