二分查詢(函式實現)
二分查詢函式
程式碼目的
在一個整形有序陣列中查詢某一個數
找到則列印數字所在下標 , 否則列印未找到.
程式碼思想:
一個有序陣列數字都是遞增向上的 , 所以如果要查詢一個數 , 逐個遍歷雖然也可以找到 , 但效率很低.
所以我們從一箇中間數查起 , 將中間數與待查詢的數字比較 ,如果待查詢數比中間數大說明待查詢數在中間數的右邊 ,左邊就可以被排除掉 . 多次迴圈下來就能找到該數字. 這樣可以加快查詢速度, 提高效率.
程式碼示例:
//二分查詢(函式實現)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int BinarySearch(int arr[], int len, int toFind) {
int left = 0;//自定義子區間左值 即待查詢區間最左端
int right = len - 1;//自定義待查詢區間右值(注意最右端下標為陣列長度減一)
while (left <= right) {
int mid = (left + right) / 2;//定義中間值mid
if (toFind < arr[mid]) {//若中間值比待尋找的值大 證明待尋找的值在左側 則排除右側區間
right = mid - 1;//待查詢區間右端變為mid-1
}
else if (toFind > arr[mid]) {//若中間值比待尋找的值小 證明待尋找的值在右側 則排除左側區間
left = mid + 1;//待查詢區間左端變為mid+1
}
else {//若中間值與待尋找的值相比既不大也不小 則證明中間值就是待尋找的值
printf("找到了!\n%d的下標為 %d\n", toFind, mid);//列印下標
break;//找到了則跳出迴圈
}
}
if (left > right) {//若區間左端大於右端則說明待尋找的值不在該陣列內
printf("未找到! \n");
}
}
int main() {
int arr[] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, };//隨便定義一個有序陣列;
int toFind;//定義待尋找的值
printf("please enter what data you want to find:\n");
scanf("%d", &toFind);//使用者輸入待尋找的數字
int size = sizeof(arr) / sizeof(arr[0]);//計算陣列長度
//因為陣列作為引數會被轉換成指標,進入函式內在計算長度等於在計算指標的長度,不符合題意
//所以我們可以在主函式內求出長度繼而傳近函式使用
BinarySearch(arr, size, toFind);//呼叫二分查詢函式
system("pause");
return 0;
}
結果演示
相關文章
- 二分查詢函式的使用函式
- c++字串查詢函式實現C++字串函式
- PHP 實現二分查詢PHP
- Js實現二分查詢,加油JS
- Golang實現二分查詢法Golang
- 二分查詢 - 手寫模板與自帶函式函式
- Python遞迴函式,二分查詢演算法Python遞迴函式演算法
- 二分查詢實現符號表符號
- Java實現二分查詢演算法Java演算法
- 查詢——二分查詢
- 二分法查詢(遞迴實現)遞迴
- Excel VBA小程式 -使 用VBA實現VLOOKUP函式查詢?Excel函式
- Solr複雜查詢一:函式查詢Solr函式
- 二分查詢(一)——純粹的二分查詢
- 二分查詢
- PostgreSQL 查詢替換函式SQL函式
- 查詢演算法__二分查詢演算法
- 二分查詢法
- PHP二分查詢PHP
- leetcode——二分查詢LeetCode
- leetcode -- 二分查詢LeetCode
- C++,Java,Python,Javascript實現二分查詢演算法C++PythonJavaScript演算法
- 二分查詢的兩種實現形式遞迴和迭代遞迴
- 查詢演算法之二分查詢演算法
- 二分查詢 | 二分查詢的一種推薦寫法
- Java-MySql-函式、多表查詢JavaMySql函式
- SQL查詢中用到的函式SQL函式
- 【資料庫】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函式實現去重查詢資料庫SQL函式
- 704.二分查詢
- labuladong_二分查詢
- 詳解二分查詢
- python二分查詢模板Python
- 二分查詢(c++)C++
- 每日leetcode——二分查詢LeetCode
- Leetcode 704 二分查詢LeetCode
- 二分查詢【折半查詢】演算法 PHP 版演算法PHP
- Java 實現二分查詢(在 1-100 裡找到目標值)Java
- 15 | 二分查詢(上):如何用最省記憶體的方式實現快速查詢功能?記憶體