C程式設計 查詢(二分法查詢 折半查詢)

2021-08-31 11:57:29 字數 2542 閱讀 6276

搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半

優點:是比較次數少,查詢速度快,平均效能好;

缺點:是要求待查表為有序表,且插入刪除困難。

因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。

主函式:

int

main()

;int length =

sizeof

(array)

/sizeof

(array[0]

);//用sizeof()獲取陣列的長度

int element;

scanf

("%d"

,&element)

;int location =

binary_research

(array,length,element);if

(location>=0)

printf

("the element's location is %d\n"

,location)

;else

printf

("don't exit this element.\n");

return0;

}

折半查詢函式部分:

//在有序表r[0..n-1]中進行二分查詢,成功時返回結點的位置,失敗時返回-1

intbinary_research

(int arr,

int length,

int element)

return-1

;//當 left>right 時表示所查詢區間內沒有結果,查詢失敗

}

關於上述函式說明:

在第8行**中:int mid = (left+right)/2;

使用(left+right)/2會有整數溢位的問題。

問題會出現在當left+right的結果大於表示式結果型別所能表示的最大值時, 這樣,產生溢位後再/2是不會產生正確結果的。

優化方法:int mid = left + (left - right)/2; //防止越界

因此改進後的程式為:

int

binary_research

(int array,

int length,

int target)

return-1

;}

另外一種寫法:int binary_research(intarr,intlow,inthigh,inttarget);

#include

intbinary_research

(int arr,

int low,

int high,

int target)

;int

main()

;//陣列中的數(由小到大)

int length =

sizeof

(array)

/sizeof

(array[0]

);//用sizeof()獲取陣列的長度

int low=

0,high=length-1;

int element;

scanf

("%d"

,&element)

;int location =

binary_research

(array,low,high,element);if

(location>=0)

printf

("the element's location is %d\n"

,location)

;else

printf

("don't exit this element.\n");

return0;

}int

binary_research

(int array,

int low,

int high,

int target)

return-1

;}

除此以外還可以使用遞迴函式實現折半查詢:

//遞迴函式實現

intbinary_research

(int array,

int low,

int high,

int target)

}

參考文章:

1.2.二分查詢/10628618?fr=aladdin

查詢 二分法查詢 折半查詢法

實現查詢指定數值在元素有序的陣列中儲存的位置 索引 返回該位置 索引 解題步驟 1.定義3個用來記錄索引值的變數,變數min記錄當前範圍最小索引值,初始值為0 變數max記錄當前範圍最大索引值,初始值為陣列長度 1 變數mid記錄當前當前範圍最中間元素的索引值,初始值為 min max 2 2.使用...

二分法查詢(折半查詢)

一 二分法查詢思想 首先從陣列的中間mid開始查詢,如果剛好等於要查詢的值,則返回這個數字的所在位置。如果要查詢的數字比mid值小,則讓mid 1,做為陣列的右邊界,重複 1 操做 如果要查詢的數字比mid大,則讓mid 1做為陣列的左邊界,重複 1 操作。如果left right時,還沒有找到該數...

折半查詢法 二分法

在有序 設為公升序 表中,取中間元素作為比較物件,若給定值與中間元素的關鍵字相等,則查詢成功 若給定值小於中間元素的關鍵字,則在中間元素的左半區繼續查詢 若給定值大於中間元素的關鍵字,則在中間元素的右半區繼續查詢。不斷重複上述查詢過程,直到查詢成功,或所查詢的區域無該資料元素,查詢失敗。測試資料 1...