二分查找思想(使用遞歸和不適用遞歸的思想)

 

public class BinarySearch {
	public static void main(String[] args) {
		int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
		System.out.println(searchLoop(array, 101));
	}
 
	/**
	 * 循環二分查找,返回第一次出現該值的位置
	 * 
	 * @param array
	 *            已排序的數組
	 * @param findValue
	 *            需要找的值
	 * @return 值在數組中的位置,從0開始。找不到返回-1
	 */
	public static int searchLoop(int[] array, int findValue) {
		// 如果數組爲空,直接返回-1,即查找失敗
		if (array == null) {
			return -1;
		}
		// 起始位置
		int start = 0;
		// 結束位置
		int end = array.length - 1;
		while (start <= end) {
			// 中間位置
			int middle = (start + end) / 2;
			// 中值
			int middleValue = array[middle];
			if (findValue == middleValue) {
				// 等於中值直接返回
				return middle;
			} else if (findValue < middleValue) {
				// 小於中值時在中值前面找
				end = middle - 1;
			} else {
				// 大於中值在中值後面找
				start = middle + 1;
			}
		}
		// 返回-1,即查找失敗
		return -1;
	}
}
 
 
使用遞歸實現折半查找
 
	public static int binSearch(int array[],  int key) { 
		int start = 0;
		int end = array.length - 1;  
		return binSearch(array,start,end,key);
    } 
	/**
	 * 遞歸折半查找
	 * @param array
	 * @param start
	 * @param end
	 * @param key
	 * @return
	 */
	public static int binSearch(int array[], int start ,int end, int key) { 
        int mid = (end + start) / 2;   
        if (array[mid] == key) {   
            return mid;   
        }   
        if (start >= end) {   
            return -1;   
        } else if (key > array[mid]) {   
            return binSearch(array, mid + 1, end, key);   
        } else if (key < array[mid]) {   
            return binSearch(array, start, mid - 1, key);   
        }   
        return -1;   
    }

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