C語(yǔ)言巧用二分查找實(shí)現(xiàn)猜數(shù)游戲

?? 文章Gitee倉(cāng)庫(kù):文章源代碼
(壹)二分查找
?? 1.1 何為二分查找
折半查找,也稱(chēng)二分查找,在某些情況下相比于順序查找,使用折半查找算法的效率更高。但是該算法的使用的前提是靜態(tài)查找表中的數(shù)據(jù)必須是有序的。
例如,在{5,21,13,19,37,75,56,64,88 ,80,92}這個(gè)查找表使用折半查找算法查找數(shù)據(jù)之前,需要首先對(duì)該表中的數(shù)據(jù)按照所查的關(guān)鍵字進(jìn)行排序:{5,13,19,21,37,56,64,75,80,88,92}。
?? 1.2 二分查找的原理
以升序數(shù)列為例,比較一個(gè)元素與數(shù)列中的中間位置的元素的大小,如果比中間位置的元素大,則繼續(xù)在后半部分的數(shù)列中進(jìn)行二分查找;如果比中間位置的元素小,則在數(shù)列的前半部分進(jìn)行比較;如果相等,則找到了元素的位置。每次比較的數(shù)列長(zhǎng)度都會(huì)是之前數(shù)列的一半,直到找到相等元素的位置或者最終沒(méi)有找到要找的元素。
動(dòng)圖演示:(于順序查找相比較)

?
?? 1.3 查找條件
二分查找的前提條件是有序數(shù)列,普通查找則不需要。
查找到返回該元素的下標(biāo),否則返回-1。
普通查找的時(shí)間復(fù)雜度為O(N), 二分查找的時(shí)間復(fù)雜度為O(logN)。 N/2/2···/2=1,2^m=N(m為折半查找的次數(shù)),那么m=log(N),二分查找的時(shí)間復(fù)雜度就為O(logN)。
?? 1.4 代碼實(shí)現(xiàn)

?? 1.4.1 初始化數(shù)據(jù)

?? 1.4.2 核心函數(shù)


(貳)猜數(shù)字游戲
?? 2.1 菜單初始化

?? 2.2 核心函數(shù)

?? 2.3 main函數(shù)

?? 2.4 總代碼
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void menu()
{
printf("**********************************\n");
printf("*********** 1.play ***********\n");
printf("*********** 0.exit ***********\n");
printf("**********************************\n");
}
//RAND_MAX--rand函數(shù)能返回隨機(jī)數(shù)的最大值。
void game()
{
int random_num = rand() % 100 + 1;
int input = 0;
while (1)
{
printf("請(qǐng)輸入猜的數(shù)字>:");
scanf("%d", &input);
if (input > random_num)
{
printf("猜大了\n");
}
else if (input < random_num)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜對(duì)了\n"); break;
}
}
}
int main()
{
int input = 0;
srand((unsigned)time(NULL));
do
{
menu();
printf("請(qǐng)選擇>:");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("選擇錯(cuò)誤,請(qǐng)重新輸入!\n");
break;
}
} while (input);
return 0;
}

到此這篇關(guān)于C語(yǔ)言巧用二分查找實(shí)現(xiàn)猜數(shù)游戲 的文章就介紹到這了,更多相關(guān)C語(yǔ)言 二分查找內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vscode 配置 C/C++編譯環(huán)境(完整教程)
這篇文章主要介紹了vscode 配置 C/C++編譯環(huán)境(完整教程),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
C語(yǔ)言中一些將字符串轉(zhuǎn)換為數(shù)字的函數(shù)小結(jié)
這篇文章主要介紹了C語(yǔ)言中一些將字符串轉(zhuǎn)換為數(shù)字的函數(shù)小結(jié),分別為atoi()函數(shù)和atol()函數(shù)以及atof()函數(shù),需要的朋友可以參考下2015-08-08
C++探索構(gòu)造函數(shù)私有化會(huì)產(chǎn)生什么結(jié)果
C++的構(gòu)造函數(shù)的作?:初始化類(lèi)對(duì)象的數(shù)據(jù)成員。即類(lèi)的對(duì)象被創(chuàng)建的時(shí)候,編譯系統(tǒng)對(duì)該對(duì)象分配內(nèi)存空間,并?動(dòng)調(diào)?構(gòu)造函數(shù),完成類(lèi)成員的初始化。構(gòu)造函數(shù)的特點(diǎn):以類(lèi)名作為函數(shù)名,?返回類(lèi)型2022-05-05
《C++ Primer》隱式類(lèi)類(lèi)型轉(zhuǎn)換學(xué)習(xí)整理
在本篇文章里小編給大家整理的是關(guān)于《C++ Primer》隱式類(lèi)類(lèi)型轉(zhuǎn)換學(xué)習(xí)筆記內(nèi)容,需要的朋友們參考下。2020-02-02
C語(yǔ)言實(shí)現(xiàn)控制臺(tái)掃雷小游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)控制臺(tái)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
C++?構(gòu)造函數(shù)學(xué)習(xí)筆記
這篇文章主要為大家介紹了C++?構(gòu)造函數(shù)學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Qt將數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出為html
這篇文章主要為大家詳細(xì)介紹了Qt如何實(shí)現(xiàn)將數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出為html,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12
C++基于reactor的服務(wù)器百萬(wàn)并發(fā)實(shí)現(xiàn)與講解
這篇文章主要介紹了C++基于reactor的服務(wù)器百萬(wàn)并發(fā)實(shí)現(xiàn)與講解,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07

