二分查找变体之循环有序数组找分界点
2011-10-12 20:05
232 查看
设一个数组循环有序(循环有序满足以下条件之一)
1.数组所有元素相等
2.数组是个有序数列,这时候分界点就是第一个元素的位置
3.总能找到一个位置(也是只有唯一一个位置)从那个位置开始,左边是个递增序列,右边也是一个有序序列,切最后一个元素小于或者等于第一个元素
求分界点的坐标
二分查找变体之循环有序数组分界点
1.数组所有元素相等
2.数组是个有序数列,这时候分界点就是第一个元素的位置
3.总能找到一个位置(也是只有唯一一个位置)从那个位置开始,左边是个递增序列,右边也是一个有序序列,切最后一个元素小于或者等于第一个元素
求分界点的坐标
二分查找变体之循环有序数组分界点
int FindMinEx(int *arr,int size) { int min = arr[0]; int beg = 1; while(beg<size) { if(arr[beg]<arr[0]) { return beg; } ++beg; } return 0; } int FindMin(int *arr,int const size) { int first = arr[0]; int last = arr[size-1]; int min = 0; int beg = 1; int end = size -1; while(beg<=end) { int mid = (beg+end)/2; //最小的元素总是在有两个递增子序列的那子序列里 if(arr[mid]>first)//左边为递增子序列 { beg = mid+1; } else if(arr[mid]<first)//右边为递增子序列 { end = mid -1; if(arr[min]>=arr[mid]) min = mid; } else { if(arr[mid]>last)//左边为递增子序列 { beg = mid+1; } else { if(arr[min]>=arr[mid]) { min = mid; } int iMid = size/2; if(iMid>mid) { beg = mid +1; } else if(iMid<mid) { end = mid -1; } else { return FindMinEx(arr,size); } } } } return min; }
相关文章推荐
- 循环有序数组中的二分查找 Search in a rotated sorted array
- 二分查找进阶——循环有序数组查找
- 循环有序数组中的二分查找 Search in a rotated sorted array
- 有序 循环数组的二分查找
- 循环有序数组/旋转数组的二分查找
- 二分查找进阶——循环有序数组查找再进阶——循环有序重复数组查找
- 二分数组的扩展:二分查找循环有序数组
- [LeetCode]Median of Two Sorted Arrays 二分查找两个有序数组的第k数(中位数)
- 循环有序数组中查找指定值
- (转载)循环有序数组查找问题
- 有序数组中的二分查找
- 有序数组的二分查找
- 【C语言基础】写代码可以在整型有序数组中查找想要的数字(while循环,if条件语句)
- 有序数组的二分查找
- KT学算法(二)——循环有序数组查找指定元素
- 循环递增的数组 二分查找
- 在一个旋转过的有序数组上实现二分查找
- 循环有序数组查找
- 算法—8.有序数组中的二分查找
- 《数据结构与算法》学习笔记3 有序数组与二分查找