二分查找 _JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 二分查找

二分查找

 2019/1/8 15:37:33  明子健  程序员俱乐部  我要评论(0)
  • 摘要:/***有序数组递归二分查找,定位值的下标**@paramarr目标数组*@paramstart起始下标*@paramend末尾下标*@paramkey查找的值*@return值的下标*/staticintbinarySearch(finalint[]arr,intstart,intend,intkey){if(start>end||end>=arr.length){return-1;}/*中间位置:(end+start)/2等于(end+start)>>
  • 标签:
class="java">	/**
	 * 有序数组递归二分查找,定位值的下标
	 * 
	 * @param arr   目标数组
	 * @param start 起始下标
	 * @param end   末尾下标
	 * @param key   查找的值
	 * @return 值的下标
	 */
	static int binarySearch(final int[] arr, int start, int end, int key) {		
		if (start > end || end >= arr.length) {
			return -1;
		}
		/* 中间位置:(end + start) / 2 等于 (end + start) >> 1 */
		int mid = (end + start) >> 1;
		if (key == arr[mid]) {
			return mid;
		}
		if (key > arr[mid]) {
			start = mid + 1;
		}
		if (key < arr[mid]) {
			end = mid - 1;
		}
		return binarySearch(arr, start, end, key);
	}

	/**
	 * 有序数组循环二分查找,定位值的下标
	 * 
	 * @param arr   目标数组
	 * @param start 起始下标
	 * @param end   末尾下标
	 * @param key   查找的值
	 * @return 值的下标
	 */
	static int binaryWhileSearch(final int[] arr, int start, int end, int key) {
		
		int mid=-1;
		do {
			if (start > end || end >= arr.length) {
				return -1;
			}
			/* 中间位置:(end + start) / 2 等于 (end + start) >> 1 */
			mid = (end + start) >> 1;
			if (key > arr[mid]) {
				start = mid + 1;
			}
			if (key < arr[mid]) {
				end = mid - 1;
			}
		} while (key != arr[mid]);
		return mid;
	}

?

  • 相关文章
发表评论
用户名: 匿名