基础算法系列(二)查找算法之二分查找

来源:互联网 发布:淘宝网踩踏式垃圾桶 编辑:程序博客网 时间:2024/05/16 15:18

二分查找又称折半查找,顾名思义,就是一半一半的查找,具体是怎么一半一半的呢?慢慢看。对一个数组进行二分查找是有一个前提条件的,就是这个数组是有序的,就是说这个数组要么是升序的,要么是降序的。对一般的数组,进行二分查找需要先对数组进行排序,这里先不讲数组排序。查找算法讲完再详细的讨论排序算法。比如说这里有一个数组{1,2,3,5,6,7,10,75,96,111,445},我们想找找看数字3在不在这个数组中,那么3就是我们的关键字,首先找出这个数组的中间数,它是7,拿关键字3跟7比较,7比3大,那么我们想要的查找的数字3只可能存在这个数组的左半部分,现在左半部分是什么?{1,2,3,5,6},再拿这个新数组的中间数跟我们的关键字3进行比较,3=3,查找成功,结束查找;反之如果在一个数组中到最后都没有找到关键字,就是查找失败。

/** * 二分查找 */public static int search_erfen(int search, int[] array, int count) {int mid = 0;count++;if (array.length != 0) {mid = array.length / 2;if (search == array[mid]) {return count;} else {if (search > array[mid]) {int[] newArray = new int[array.length - mid - 1];for (int i = mid + 1; i < array.length; i++)newArray[i - mid - 1] = array[i];return search_erfen(search, newArray, count);} else {int[] newArray = new int[mid];for (int i = 0; i < mid; i++)newArray[i] = array[i];return search_erfen(search, newArray, count);}}} elsereturn -1;}
查找成功返回查找次数,查找失败返回-1

0 0
原创粉丝点击