<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文帶著大家學習一個簡單的**二分查詢演演算法,也叫折半查詢演演算法**
先給大家提出一個問題
額,大家應該都會碰到這種情況,那大家怎麼猜呢?
我想一定是會說1000,他說太少了,你又猜1500…
這其實就是二分查詢的應用。
接下來我們來看一個問題
如何在一個有序陣列中查詢一個數位?
有一部分帥氣的觀眾可能會說:
直接遍歷陣列,一個一個對比就找到了啊
但是大家有沒有想過一個問題,陣列中如果只有幾十個數的話,那完全可以這樣做
那如果陣列中有幾十萬個呢?
這樣遍歷絕對是非常消耗時間,題目很明確說有序陣列,如果直接遍歷,我們是不是對不起有序這二字呢?
我們用一個簡單的範例來實現一下二分查詢
比如有這樣一個陣列
我們在其中查詢一個數位。使用二分查詢,我們如何確定中間值呢?
有人說,陣列長度除以二,但是中間值會變,陣列長度不可變 ----排除
這邊我們給大家帶來兩種方法來計算中間值
首先大家要清楚,我們要有兩個邊界,就是範圍,比如鞋子02000變成10002000
我們使用兩個下標作為兩端,left 以及 right 中間值我們定義為mid
mid = (left + right) / 2;
我對長度為奇數和偶數的陣列都進行了分析,這種方法並沒有漏過任何一個數,所以可以使用
第一種方法有一種弊病,如果陣列特別長的話,left+right可能會超出型別的最大值範圍
我們得想辦法解決掉這個問題
假如我們把left最上邊那一小塊放到left上邊,是不是就是中間值了呢
、
把這種方法寫成表示式就是
mid = (right - left) / 2 + left;
這就是兩種計算中間下標的方法
還有一個問題,什麼時候就不再查詢了呢?
所以當left > right 時,就沒必要查詢了
話不多說,直接上程式碼
#include <stdio.h> //詳解二分查詢 int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; //計算陣列長度 int length = sizeof(arr) / sizeof(arr[0]); int n = 0;//待查詢的值 scanf("%d", &n); int left = 0;//左下標 int right = length - 1;//右下標 int mid = 0;//中間下標 while(left <= right) { mid = (left + right) / 2; if(arr[mid] > n) { right = mid - 1; } else if (arr[mid] < n) { left = mid + 1; } else { printf("找到了,下標為%dn", mid); break; } } if (left > right) { printf("找不到,陣列中不存在該值n"); } return 0; }
理解二分查詢法的實現方式
核心在於中間下標的控制以及下標的變化
大家下來一定要自己畫圖理解,寫程式碼測試,多寫寫就悟了。
到此這篇關於C語言折半查詢法的由來及使用詳解的文章就介紹到這了,更多相關C語言折半查詢內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45