java搜索算法——二分法查找

java搜索算法——二分法查找

搜索建立在排好序的基础之上

 TestSearch.java

//搜索算法
public class TestSearch {
	public static void main(String[] args) {
		
		//搜索建立在排好序的基础之上
		int a[] = { 1, 3, 6, 8, 9, 10, 12, 18, 20, 34 };
		
		//12这个值位于a[]的第几个位置
		int i = 12;
		
		System.out.println(search(a, i));
		System.out.println(binarySearch(a, i));//返回值12在数组里面的位置(下标)
	}
	
	//搜索全部
	public static int search(int[] a, int num) {
		for(int i=0; i<a.length; i++) {
			if(a[i] == num) return i;
		}
		return -1;
	}
	
	//二分法查找
	/*
		int[] a	查找的数组
		int num	查找数组中的值
		return	返回值的位置
	*/
	public static int binarySearch(int[] a, int num) {
		if (a.length==0) return -1;
		
		int startPos = 0; //起始位置
		int endPos = a.length-1;//结束位置
		int m = (startPos + endPos) / 2;//中间的位置
		
		/*
			起始位置比结束位置小,或等于,执行循环
			起始位置比结束位置大,循环结束
		*/
		while(startPos <= endPos){
			if(num == a[m]) return m;//找到了返回m
			if(num > a[m]) {
				startPos = m + 1;//起始位置向右调整
			}
			if(num < a[m]) {
				endPos = m -1;//结束位置向左调整
			}
			m = (startPos + endPos) / 2;//重新计算中间的位置
		}
		
		return -1;//没有找到返回-1
	}

}
F:\java>javac TestSearch.java

F:\java>java TestSearch
6
6

F:\java>

猜你喜欢

转载自mfcfine.iteye.com/blog/2383795
今日推荐