国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C語(yǔ)言】二分查找的實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了【C語(yǔ)言】二分查找的實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

查找

前言

在我們?nèi)粘I钪?,?jīng)常會(huì)遇到查找一樣?xùn)|西的情景,比如在一個(gè)班的學(xué)生成績(jī)中找到xx分對(duì)應(yīng)的人

我們可以嘗試用c語(yǔ)言程序解決這類查找問(wèn)題

#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;//被查找的元素
	int i = 0;
	for (i = 0; i < 10; i++)//遍歷數(shù)組
	{
		if (arr[i] == k)
		{
			printf("找到了,下標(biāo)是%d", i);
		}
	}
	return 0;
}

我們可以很容易寫出這樣的代碼
【C語(yǔ)言】二分查找的實(shí)現(xiàn)

這里數(shù)組arr中只有十個(gè)元素,那如果有100個(gè),1000個(gè),100000000…000個(gè)呢?

考慮最壞的情況,我們所要找的元素正好處在數(shù)組的最后一個(gè),那就意味著我們的循環(huán)要進(jìn)行n次(當(dāng)存在n個(gè)元素時(shí))

這樣程序的效率就會(huì)很低。

那我們有沒有更好的查找方法呢?

當(dāng)然有,就是我們今天要提到的二分查找。

那么二分查找是什么意思呢?

首先二分查找的前提是被查找的數(shù)組必須是有序

例如
【C語(yǔ)言】二分查找的實(shí)現(xiàn)
我們首先記錄數(shù)組最左端的下標(biāo)為left,最右邊的為right。
求出中間元素的下標(biāo)mid=(left+right)/2
判斷被查找的元素(定義為k)中間元素的大小

如果arr[mid]>k
意思是中間元素的值大于被查找的元素,那么k就只能在中間元素的左側(cè),因?yàn)閿?shù)組是有序的。

同理如果arr[mid]<k
意思是中間元素的值小于被查找的元素,那么k就只能在中間元素的右側(cè),因?yàn)閿?shù)組是有序的。

如果arr[mid]=k
w這就意味著我們找到了被查找的數(shù)

這樣我們其實(shí)就完成了一次二分查找

代碼實(shí)現(xiàn)

#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int left = 0, right = 9;//數(shù)組左邊下標(biāo)為left,右邊下標(biāo)為right
	int mid = 0;//定義數(shù)組中間元素下標(biāo)為mid
	int k = 7;//定義待查找的數(shù);
	mid = (right + left) / 2;
	if (arr[mid] < k)
	{
		left = mid + 1;
	}
	else if (arr[mid] > k)
	{
		right = mid - 1;
	}
	else
	{
		printf("找到了,下標(biāo)是:%d", mid);//如果查找到元素,打印該元素下標(biāo);
	}

	return 0;
}

但是我們往往不能在一次查找中就把被查找的元素找到

所以我們?nèi)绻胍獪?zhǔn)確查找出被查找的元素,就應(yīng)該還需要繼續(xù)進(jìn)行這樣的查找,所以我們將上述過(guò)程放在一個(gè)循環(huán)中

那么循環(huán)的條件是什么呢?

int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };

我們拿這個(gè)數(shù)組舉例,假設(shè)我們被查找的數(shù)是k=7;
我們可以得到
left=0 right=9 mid=(0+9)/2=4
下標(biāo)4對(duì)應(yīng)的元素是5 5<7 所以將5右邊的元素全部排除 left=mid+1=5
現(xiàn)在沒有查找到,再來(lái)一次

left=5 right=9 mid=(5+9)/2=7

arr[7]=8 >被查找的元素k right=mid-1=6

left=5 right=6 mid=(5+6)/2=5 *

arr[5]=6 < 被查找的元素 left=mid-1=6

left=6 right=6此時(shí)left=right;

arr[6]=7=k 該元素被查找到 說(shuō)明其中其中一個(gè)條件是left=right

如果我要找的元素在這個(gè)序列中并,沒有出現(xiàn) 那么就會(huì)出現(xiàn)left>right的情況(可以按照上述的分析方法分析)

所以循環(huán)的條件是left<=right

代碼如下

#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int left = 0, right = 9;//數(shù)組左邊下標(biāo)為left,右邊下標(biāo)為right
	int mid = 0;//定義數(shù)組中間元素下標(biāo)為mid
	int k = 0;
	scanf("%d", &k);//定義待查找的數(shù);
	int flag = 1;//標(biāo)志變量
	
	while (left <= right)
	{
		mid = (right + left) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			flag = 0;
			printf("找到了,下標(biāo)是:%d", mid);//如果查找到元素,打印該元素下標(biāo);
			break;//找到元素,跳出循環(huán);
		}
	}
	if (flag == 1)
	{
		printf("找不到");
	}
	return 0;
}

到此我們就實(shí)現(xiàn)了二分查找
如果認(rèn)為這篇博客對(duì)你有幫助,留下你的點(diǎn)贊和關(guān)注吧!

本文所使用IDE VS2022文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-470453.html

到了這里,關(guān)于【C語(yǔ)言】二分查找的實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C語(yǔ)言之二分查找

    C語(yǔ)言之二分查找

    目錄 一、二分查找算法 二、分支語(yǔ)句中應(yīng)注意的小點(diǎn) ? 所謂二分查找,就是要在一組 有序的數(shù)列 中,查找給定的數(shù)是否在此數(shù)列中。 最主要的步驟有三個(gè): 1.確定被查找的范圍的左右下標(biāo)left、right 2.根據(jù)left和right,確定中間元素的下標(biāo)mid 3.根據(jù)mid鎖定的元素和查找的元素

    2023年04月22日
    瀏覽(16)
  • 【C語(yǔ)言】二分查找

    【C語(yǔ)言】二分查找

    在 有序表 中,每次都取 中間元素 作為比較的對(duì)象。 如果給中間值與給定值相等,則查找成功,返回該元素的下標(biāo)/索引; 如果中間值大于給定值,則在中間值的右半?yún)^(qū)間繼續(xù)查找; 如果中間值小于給定值,則在中間值的左半?yún)^(qū)間繼續(xù)查找; 確定了該元素所在范圍那么范圍

    2024年02月06日
    瀏覽(17)
  • 【C語(yǔ)言】二分查找(含圖解)

    【C語(yǔ)言】二分查找(含圖解)

    二分法:二分查找算法是一種在 有序數(shù)組 中查找某一特定元素的搜索算法,其思想就是不斷地將有序查找表“一分為二”,逐漸縮小搜索區(qū)域,進(jìn)而找到目標(biāo)元素。 搜素過(guò)程從數(shù)組的中間元素開始,如果中間元素正好是要查找的元素,則搜 素過(guò)程結(jié)束; 如果某一特定元素

    2024年02月07日
    瀏覽(17)
  • 牛刀小試---二分查找(C語(yǔ)言)

    牛刀小試---二分查找(C語(yǔ)言)

    二分查找,也叫折半查找,是一種在 有序數(shù)組 中查找特定元素的算法。它通過(guò)比較中間元素和目標(biāo)值的大小,將查找范圍縮小為一半,直到找到目標(biāo)元素或者查找范圍為空。 ?1.?確定搜索范圍:首先,需要確定要在哪個(gè)區(qū)間內(nèi)進(jìn)行查找。這可以通過(guò)比較目標(biāo)值與中間元素的

    2024年01月17日
    瀏覽(26)
  • c語(yǔ)言經(jīng)典算法—二分查找,冒泡,選擇,插入,歸并,快排,堆排

    c語(yǔ)言經(jīng)典算法—二分查找,冒泡,選擇,插入,歸并,快排,堆排

    ? ? ? ? ?1、前提條件:數(shù)據(jù)有序,隨機(jī)訪問(wèn); ? ? ? ? ?2、實(shí)現(xiàn):遞歸實(shí)現(xiàn),非遞歸實(shí)現(xiàn) ? ? ? ? ?3、注意事項(xiàng): ????????????????循環(huán)退出條件:low =high,low = high.說(shuō)明還有一個(gè)元素,該元素還要與key進(jìn)行比較 ? ? ? ? ? ? ? ? mid的取值:mid=(low + high)/2;mid = l

    2024年02月05日
    瀏覽(29)
  • 算法與人生 揭秘C語(yǔ)言中高效搜索的秘訣——二分查找算法詳解

    算法與人生 揭秘C語(yǔ)言中高效搜索的秘訣——二分查找算法詳解

    引言,少年們,大家好。在這里祝大家元旦快樂(lè),我是博主 那一臉陽(yáng)光 ,今天來(lái)介紹二分查找 在計(jì)算機(jī)科學(xué)領(lǐng)域,搜索算法是數(shù)據(jù)處理和問(wèn)題解決的重要工具之一。其中,**二分查找算法(Binary Search)**以其卓越的時(shí)間復(fù)雜度和簡(jiǎn)潔高效的實(shí)現(xiàn),在眾多搜索算法中脫穎而出

    2024年01月17日
    瀏覽(28)
  • golang二分查找算法實(shí)現(xiàn)

    項(xiàng)目中使用到有序數(shù)組查找特定元素,簡(jiǎn)單記錄下 Golang 中二分查找算法。 二分查找算法是一種在有序數(shù)組中查找特定元素的高效算法。它的基本思想是通過(guò)不斷將查找范圍縮小一半,來(lái)快速定位目標(biāo)元素是否存在。該算法要求數(shù)組是有序的,這是因?yàn)橛行驍?shù)組的特性允許我

    2024年01月25日
    瀏覽(16)
  • java實(shí)現(xiàn)二分查找算法

    遞歸實(shí)現(xiàn): public static int binarySearchRecursive(int[] arr, int target) { ? ? return binarySearchRecursive(arr, target, 0, arr.length - 1); } ? private static int binarySearchRecursive(int[] arr, int target, int low, int high) { ? ? if (low high) { ? ? ? ? return -1; // 沒有找到目標(biāo)元素 ? ? } ? ?? ? ? int mid = (low + high) / 2

    2024年04月09日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)-查找(順序查找與二分查找的講解與代碼實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)-查找(順序查找與二分查找的講解與代碼實(shí)現(xiàn))

    順序查找概念:從表的另一端開始,一次將記錄的和給定值進(jìn)行比較,若某個(gè)記錄的和給定的值相等,則查找成功,反之則查找失敗。 ASL:平均查找長(zhǎng)度 pi查找概率,ci查找次數(shù) eg:序列1,2,3 查找1的次數(shù)為1概率為1/3,2為兩次概率1/3,3的次數(shù)為3概率1/3? 將12

    2024年02月06日
    瀏覽(28)
  • 折半查找(二分查找)的兩種方法及實(shí)現(xiàn) Python

    概念: 在計(jì)算機(jī)科學(xué)中,折半查找,也稱二分查找,是一種在有序數(shù)組中查找某一特定元素的搜索算法。 搜索過(guò)程從數(shù)組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過(guò)程結(jié)束;如果某一特定元素大于或者小于中間元素,則在數(shù)組大于或小于中間元素的那一

    2024年02月09日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包