二分查找——递增旋转数组查找最大最小值
二分查找——递增旋转数组查找最大最小值
二分查找
适用于数据量过大的查找。条件是数组需要排序。
思想:
例如我们要查找的数为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 }

浙公网安备 33010602011771号