旋转数组中查找元素

来源:互联网 发布:淘宝一键抢拍神器 编辑:程序博客网 时间:2024/04/26 11:22

题目:从无重复元素的旋转数组中查找某个元素是否存在

比如:[0,1,2,3,4,5,6,7],旋转数组为[4,5,6,7,1,2,3]

排序的数组或是部分排序的数组都用二分查找。

int Search(int a[],int n,int key){if(a==NULL||n<=0)return -1;int low=0,high=n-1;while(low<=high){int mid=(low+high)/2;if(a[mid]==key)return mid;if(a[low]<=a[mid]) //前半段是有序的{if(a[low]<=key&&key<a[mid]) //查找的元素在a[low...mid)之间high=mid-1;else                        //查找的元素在a(mid...high]之间low=mid+1;}else              //a[low]>a[mid]  后半段有序{if(a[mid]<key&&key<=a[high]) //查找的元素在a(mid...high]之间low=mid+1;else                         //查找的元素在a[low...mid)之间high=mid-1;}}return -1;}

如果数组里存在重复元素,那么当a[low]<=a[mid]就不能说明a[low...mid]是有序的了,比如[1,2,1,1,1,1,1]

int search(int a[],int n,int key){int low=0,high=n-1;while(low<=high){int mid=(low+high)/2;if(a[mid]==key)return mid;if(a[low]<a[mid]){if(a[low]<=key&&key<a[mid])high=mid-1;elselow=mid+1;}else if(a[low]>a[mid]){if(a[mid]<key&&key<=a[high])low=mid+1;elsehigh=mid-1;}else   //a[low]==a[high],low下移一位low++;}return -1;}


0 0