一、二分法查詢思想
首先從陣列的中間mid開始查詢,如果剛好等於要查詢的值,則返回這個數字的所在位置。
如果要查詢的數字比mid值小,則讓mid-1,做為陣列的右邊界,重複(1)操做;如果要查詢的數字比mid大,則讓mid+1做為陣列的左邊界,重複(1)操作。
如果left=right時,還沒有找到該數字,則此數字不存在於這個陣列當中。
如圖:
二、二分法查詢的前提條件
三、**實現
第一種:非遞迴實現 時間複雜度為o(log2^n)
#includeint searchval(int *arr,int n,int val)
int left=0;right=n-1;
while(right>=left)
else if(arr[mid]left&&val=arr[mid-1]) mid--;
break;
}} return pos;
}int main()
; int n=sizeof(arr)/sizeof(arr[0]);
int pos=findval(arr,n,7);
printf("%d\n",pos);
return 0;
}
第二種:遞迴演算法
#includeint search(int *arr,int left,int right,int val)
else if(valleft&&val=arr[mid-1]) --mid;
pos=mid;
}} return pos;
}int searchval(int *arr,int n,int val)
int main()
; int n=sizeof(arr)/sizeof(arr[0]);
int pos=searchval(arr,n,2);
printf("%d\n",pos);
return 0;
}
查詢 二分法查詢 折半查詢法
實現查詢指定數值在元素有序的陣列中儲存的位置 索引 返回該位置 索引 解題步驟 1.定義3個用來記錄索引值的變數,變數min記錄當前範圍最小索引值,初始值為0 變數max記錄當前範圍最大索引值,初始值為陣列長度 1 變數mid記錄當前當前範圍最中間元素的索引值,初始值為 min max 2 2.使用...
折半查詢法 二分法
在有序 設為公升序 表中,取中間元素作為比較物件,若給定值與中間元素的關鍵字相等,則查詢成功 若給定值小於中間元素的關鍵字,則在中間元素的左半區繼續查詢 若給定值大於中間元素的關鍵字,則在中間元素的右半區繼續查詢。不斷重複上述查詢過程,直到查詢成功,或所查詢的區域無該資料元素,查詢失敗。測試資料 1...
JAVA 折半查詢(二分查詢 二分法)
折半演算法 二分法 只能應用在有序陣列中 從大到小或者從小到大 從左到右哈哈 int array int left 0 int right array.length 1 最右端的下標為總長度 1 int middle 中間下標 int sum 12 要查詢的數字 int index array.le...