1. 程式人生 > 實用技巧 >[CF1149B] Three Religions - 動態dp

[CF1149B] Three Religions - 動態dp

Java順序查詢、二分查詢

  查詢演算法中順序查詢算是最簡單的了,無論是有序的還是無序的都可以,只需要一個個對比即可,但其實效率很低。

順序查詢

動圖演示

詳細程式碼

      // 順序查詢
      public static boolean search(int[] arrray, int key) {
		for (int i = 0; i < arrray.length; i++) {
			if (arrray[i] == key) {
				return true;
			}
		}
		return false;
	}

二分查詢

  二分法查詢適用於大的資料,但前提條件是資料必須是有序的,他的原理是先和中間的比較,如果等於就直接返回,如果小於就在前半部分繼續使用二分法進行查詢,如果大於則在後半部分繼續使用二分法進行查詢。

動圖演示

詳細程式碼

      // 非遞迴
	public static boolean binarySearch1(int[] array,int key) {
		int low = 0;
		int high = array.length-1;
		while(low <= high) {
			int middle = low + (high-low)/2;
			if(key==array[middle]) {
				return true;
			}
			if(key>array[middle]) {
				low = middle + 1;
			}
			if(key<array[middle]) {
				high = middle - 1;
			}
		}
		return false;
	}
	// 遞迴
	public static boolean binarySearch2(int[] array,int key) {
		int low = 0;
		int high = array.length - 1;
		
		return Search(array,key,low,high);
	}
	public static boolean Search(int[] array,int key,int low,int high) {
		int mid = low + (high - low)/2;
		if(low>high) {
			return false;
		}
		if(key == array[mid]) {
			return true;
		}
		if(key>array[mid]) {
			return Search(array,key,mid+1,high);
		}
		return Search(array,key,low,mid-1);
	}