二分查找——递增旋转数组查找最大最小值

二分查找——递增旋转数组查找最大最小值

  二分查找

    适用于数据量过大的查找。条件是数组需要排序。

    思想:

      例如我们要查找的数为A,查询数组为Array[x]的升序数组。首先找到数组的中间值mid =(0 + x)/2,判断A与Array[mid]的大小。若A = Array[mid] ,则mid就是查询数据的位置。若A>Array[mid],则下次查找为[mid,x],mid=(mid + x)/2。若A<Array[mid],则下次查找为[0,mid],mid = (mid + 0)/2。以此类推。

  旋转数组

    把数组的前N个元素移动到数组末尾,叫做数组的旋转。

   代码

 1 int minArray(int* numbers, int numbersSize){
 2     if(numbersSize == 0)
 3         return 0;
 4     return min(numbers,0,numbersSize-1);
 5 }
 6 
 7 
 8 
 9 int min(int* numbers, int x,int y){//y = numbersSize-1
10     int mid = x + (y - x)/2;
11     if(x == y)
12         return numbers[mid];
13     if(numbers[y] < numbers[mid])
14     {
15         return min(numbers,mid+1,y);
16     }
17     else if(numbers[y]==numbers[mid])
18     {
19         return min(numbers,x,y-1);
20     }
21     else
22     {
23         return min(numbers,x,mid);
24     }
25 }

 

  

posted @ 2020-07-26 09:49  X_小马  阅读(246)  评论(0)    收藏  举报