以下均为读书笔记
二分查找 介绍:
假设你要在《新华字典》里找一个字,比如’睿‘,可能他信手翻开了字母M的某个页面,这时他知道睿的拼音首字母r在M的后面,于是他又从后一半里随便翻开一页,同上最后找到’睿‘字。可能我们都有过这样的经历,查字典(假设你不喜欢用部首,或者你根本在用英文词典)的时候先信手翻开一页,再根据这一页来判断是继续往前翻还是向后翻,往往是不断地缩小搜索范围。这就是我现在要讲的 二分查找
二分查找的原理很简单,哪怕是小孩子也能无师自通,不断成倍数的缩小搜索范围,每次判断当前位置和预期位置的次序来决定搜索方向,这就引出了另外一个问题------被搜索的序列必须要遵循某种顺序排列,当然,这就是排序的问题了。
现在我们给出二分查找的java实现案例,输入一个int类型数组和一个int类型数,如果一个x在arr数组中,则返回x的索引(数组索引从0开始);如果不在,就返回-1。
1 public static void main(String[] args) { 2 int[] arr= {1,3,5,7,9,11,13,15,17,19}; 3 System.out.println(binary_search(arr, 17)); 4 } 5 public static int binary_search(int arr[], int item) { 6 int mid = arr.length / 2; 7 if (item == arr[mid]) { 8 return mid; 9 } 10 11 int start = 0; 12 int end = arr.length - 1; 13 while (start <= end) { 14 mid = (end - start) / 2 + start; 15 if (item < arr[mid]) { 16 end = mid - 1; 17 }else if (item > arr[mid]){ 18 start = mid + 1; 19 }else{ 20 return mid; 21 } 22 } 23 return -1; 24 }