实习过程中,琐事也很多,难得有个明确的方向。虽然Java和算法都没啥基础,所以从头开始也没有负担。
还有一年毕业,总得挣扎一下。
从最简单的二分查找法开始好了。
最简单的非递归实现:
package com.jerry.code;
public class binary {
public static void main(String[] args){
int[] srcArray = {1,2,3,4,5,6,7,8,9};
System.out.println(binarysearch(srcArray,5)+"是5所在的排序");
<span style="white-space:pre"> </span>System.out.println(binarysearch(srcArray,7,0,8)+"是7所在的排序");<span style="white-space:pre"> </span>
}
public static int binarysearch(int[] srcArray,int des){
int low = 0;
int high = srcArray.length -1 ;
int middle = 0;
while(low <= high){
middle = (low + high)/2;
if(des == srcArray[middle]){
return middle;
}else if(des < srcArray[middle]){
high = middle - 1;
}else if(des > srcArray[middle]){
low = middle + 1;
}
}
return -1;
}
}
递归方法的实现:
public static int binarysearch(int[] datas,int data,int start,int end){
int mid = 0;
mid = (start + end)/2;
if(start > end||data > datas[end]||data < datas[start]){
return -1;
}
if(data > datas[mid]){
return binarysearch(datas,data,mid+1,end);
}else if(data < datas[mid]){
return binarysearch(datas, data, start, mid-1);
}else {
return mid;
}
}
二分查找法只适用于递增的数组,是通过每次缩小一半来最终确定目标所在的位置。