c語言實現折半查詢演算法(二分查詢)

2021-08-20 09:23:45 字數 759 閱讀 7310

實驗課上乙個題目題目要求使用折半查詢演算法查詢資料,結果一番折騰也沒能夠實現。下來查了一些資料,第一次寫部落格就實現一下這個未完成的演算法。

折半查詢要求資料序列呈現線性結構,也就是經過排序的,假設資料已排序。

演算法的操作步驟:

首先需要設3個變數lownum,midnum,highnum,分別儲存陣列元素的開始,中間和末尾的序號。假定有10個元素,開始時令lownum=0,highnum=9,midnum=(lownum+highnum)/2=4。接著進行以下判斷:

(1)如果序號為midnum的陣列元素的值與x相等,表示查詢到了資料,返回該序號midnum。

(2)否則如果x(3)如果x>a[midnum],表示要查詢的資料x位於midnum+1與highnum序號之間,不需要再去查詢lownum與midnum序號之間的元素。因此,將lownum變數的值改為midnum-1,重新查詢midnum-1(即lownum變數的新值)與highnum之間的資料。     (4)逐步迴圈,如果lownum>highnum時還未找到目標資料x,則表示資料中無此資料。

示例**:

int search(int a,int n,int x) //折半查詢

return -1; //未查找到

}

內容參考來自《c/c++常用演算法手冊》

C語言 折半查詢(二分查詢)演算法

什麼是折半查詢 當我們在一堆有序陣列中間查詢乙個數的時候,先將中間的數與查詢數進行比較。如果中間數大於我們要查詢的數,則在中間左半邊進行查詢 同樣的,如果中間數小於我們要查詢的數,則在中間往右半邊再次進行查詢。重複以上的過程,直到滿足,如果不滿足,則查詢失敗。條件 元素必須按照大小有序排列。那我們實...

c 實現二分查詢 折半查詢 演算法

二分查詢是一種常用的查詢演算法,它不難理解,但是在解決一些問題的時候由於邊界問題的處理不當,經常會出現一些錯誤,比如說死迴圈。首先我們介紹乙個基礎應用,在乙個排序好的線性表中查詢目標。問題描述 給定乙個整數x和整數 解決思路 一種自然而然的想法是從左到右掃瞄,它的執行時間是線性的,但是對於乙個龐大的...

C語言折半查詢(二分查詢)

定義 對使用者輸入的數是否在已經按順序定義好的一組數上進行查詢 思想 定義好的一組數必須按順序排序,一般從小到大排序 將一組數分為兩個部分 low指第乙個數,mid指中間乙個數,high指第最後乙個數 把查詢數n與mid比較 如果n mid,說明在mid右側,low的位置發生改變,除去當時low本身...