菜鸟学排序----二分查找法

来源:互联网 发布:装饰报价软件 编辑:程序博客网 时间:2024/05/16 10:55
非递归方法
public int binarySearch_asc(int[] array, int data) {//正序列查找
int beginIndex = 0;int endIndex = array.length - 1;int midIndex = -1;if (data < array[beginIndex] || beginIndex > endIndex|| data > array[endIndex]) {return -1;}while (beginIndex <= endIndex) {midIndex = (beginIndex + endIndex) >> 1;if (data < array[midIndex]) {endIndex = midIndex - 1;} else if (data > array[midIndex]) {beginIndex = midIndex + 1;} else {return midIndex;}}return -1;}public int binarySearch_desc(int[] array, int data) {//逆序列查找int beginIndex = 0;int endIndex = array.length - 1;int midIndex = -1;if (data > array[beginIndex] || beginIndex > endIndex|| data < array[endIndex]) {return -1;}while (beginIndex <= endIndex) {midIndex = (beginIndex + endIndex) >> 1;if (data < array[midIndex]) {beginIndex = midIndex - 1;} else if (data > array[midIndex]) {endIndex = midIndex + 1;} else {return midIndex;}}return -1;}
递归方法
public int binarySearch(int[] array, int data, int beginIndex, int endIndex) {int midIndex =  (beginIndex + endIndex) >> 1;if(data < array[beginIndex] || data > array[endIndex] || beginIndex > endIndex ){return -1;}if(data>array[midIndex]){return binarySearch(array,data,midIndex +1 , endIndex);}else if(data<array[midIndex]){return binarySearch(array,data,beginIndex , midIndex - 1);}else {return midIndex;}}

原创粉丝点击