Java實現二分法(折半)查找數組中的元素

二分查找

算法思想:又叫折半查找,要求待查找的序列有序。每次取中間位置的值與待查關鍵字比較,如果中間位置的值比待查關鍵字大,則在前半部分循環這個查找的過程,如果中間位置的值比待查關鍵字小,則在後半部分循環這個查找的過程。直到查找到了爲止,否則序列中沒有待查的關鍵字。

1.非遞歸實現

    /**
	 * 非遞歸二分查找法
	 * @param array 查詢的數組
	 * @param find 要查找的值
	 * @return 值在數組中的位置
	 */
	public static int search(int[] array, int find){
		if(array == null){
			return -1;
		}
		int start = 0;
		int end = array.length - 1;
		int middle = 0;
		while(start <= end){
			middle = (start + end) / 2;//中間的位置
			if(array[middle] == find){//中間值等於要查找的值,直接返回
				return middle + 1;
			}else if(array[middle] < find){//中間值小於要查找的值,就在中間值後面繼續查找
				start = middle + 1;
			}else{//中間值大於要查找的值,就在中間值前面繼續查找
				end = middle -1;
			}
		}
		return -1;//未查找到,返回-1
	}

2.遞歸實現

/**
	 * 遞歸二分查找法
	 * @param array 查詢的數組
	 * @param start 開始位置
	 * @param end 結束位置
	 * @param find 要查找的值
	 * @return 值在數組中的位置
	 */
	public static int search(int[] array, int start, int end, int find){
		if(array == null){
			return -1;
		}
		int middle = (start + end) / 2;//中間的位置
		if(start <= end){
			if(array[middle] == find){//中間值等於要查找的值,直接返回
				return middle + 1;
			}else if(array[middle] < find){//中間值小於要查找的值,就在中間值後面繼續查找
				return search(array, middle + 1, end, find);
			}else{//中間值大於要查找的值,就在中間值前面繼續查找
				return search(array, start, middle -1, find);
			}
		}
		return -1;//未查找到,返回-1
	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章