二分法查詢(折半查詢)

2021-09-07 10:52:00 字數 1136 閱讀 8487

一、二分法查詢思想

首先從陣列的中間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...