二分法查找思路

二分法查找

特征:
1. 要求查询的数组必须是一个经过排序之后的数组
2. 多个指定数据的情况下,无法告知到底是第几个数据出现
3. 没有找到数据返回负数
演示:
1 3 5 7 9 11 13 15 17 19
例如:
查询元素 13的下标位置
第一步:
中间下标元素是 下标为4 元素值=9
最小下标为0
最大下标为9
9 < 13
需要修改最小下标 ==> 中间下标 + 1 ==> 5
第二步:
中间下标元素是 下标为7 元素值=15
最小下标为5
最大下标为9
15 > 13
需要修改最大下标 ==> 中间下标 - 1 ==> 6
第三步:
中间下标元素是 下标为5 元素值=11
最小下标为5
最大下标为6
11 < 13
需要修改最小下标 ==> 中间下标 + 1 ==> 6
第四步:
得到结果

/**                                                        
 * 二分法查找算法                                                 
 *                                                         
 * @param sortedArray 这里要求是一个int类型数组,并且是进过排序之后的升序数组        
 * @param find 需要查询的元素                                     
 * @return 返回值大于等于0找到元素下标位置,没有找返回-1                        
 */                                                        
public static int halfSearch(int[] sortedArray, int find) {
	int minIndex = 0;                                      
	int maxIndex = sortedArray.length - 1;                 
	int mid = (minIndex + maxIndex) / 2;                   
	                                                       
	while (minIndex <= maxIndex) {                         
		if (sortedArray[mid] > find) {                     
			maxIndex = mid - 1;                            
		} else if (sortedArray[mid] < find) {              
			minIndex = mid + 1;                            
		} else {                                           
			return mid;                                    
		}                                                  
		                                                   
		mid = (minIndex + maxIndex) / 2;                   
	}                                                      
	                                                       
	return -1;                                             
}                                                          
发布了13 篇原创文章 · 获赞 4 · 访问量 821

猜你喜欢

转载自blog.csdn.net/weixin_42286688/article/details/104288983
今日推荐