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

C語言:寫一個函數(shù),實現(xiàn)一個整型有序數(shù)組的二分查找

這篇具有很好參考價值的文章主要介紹了C語言:寫一個函數(shù),實現(xiàn)一個整型有序數(shù)組的二分查找。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

題目:

寫一個函數(shù),實現(xiàn)一個整型有序數(shù)組二分查找,找出要找的數(shù)字數(shù)組中對應的下標

? ? ? ? ? ? ? ? ? ??

?=========================================================================

? ? ? ? ? ? ? ? ? ? ? ?

思路:

總體思路:

(一)自定義函數(shù)部分:

? ? ? ? ? ? ? ??

(1).

參數(shù):

int arr[] --?數(shù)組首地址

?int k -- 要在數(shù)組中找的數(shù)字

?int sz -- 數(shù)組長度

? ? ? ? ? ? ??

定義左右下標

? ? ? ? ? ? ? ? ? ?

(2).

使用二分查找法;

? ? ? ? ? ? ? ?

(二)主函數(shù)部分:

? ? ? ? ? ?

定義有序數(shù)組,設置要查找的值,求出數(shù)組元素個數(shù)。

? ? ? ? ? ? ? ?

調(diào)用自定義函數(shù)。

? ? ? ? ? ? ? ?

判斷自定義函數(shù)的返回值打印相應的情況。

? ? ? ? ? ? ? ??


? ? ? ? ? ? ? ? ?

自定義函數(shù)部分:

第一步:

(1). 形參的設置:

int arr[] -- 數(shù)組首地址

int k -- 要在數(shù)組中找的數(shù)字;

int sz -- 數(shù)組長度

? ? ? ? ? ? ?

(2). 定義左右下標 -- left right

? ? ? ? ? ? ? ? ? ? ?

實現(xiàn)代碼:

#include <stdio.h>

int binary_search(int arr[], int k, int sz)//形參
{
	int left = 0; //左下標
	int right = sz - 1; //右下標


}

int main()
{

	return 0;
}

實現(xiàn)圖片:

C語言:寫一個函數(shù),實現(xiàn)一個整型有序數(shù)組的二分查找

? ? ? ? ? ? ? ? ?


? ? ? ? ? ? ? ? ?

第二步:

使用二分查找方法

? ? ? ? ?

(1). 使用while循環(huán)。

? ? ? ? ??

(2). 生成中間值下標 mid

int mid = left + (right?- left) / 2;

left 小的一邊,(right - left)兩者的差值,(right - left)/ 2 差值的一半

left + (right - left) / 2,即 小的一邊 加上 差值的一半,

這時 兩邊是一樣的任意一邊都是平均值中間值

? ? ? ? ? ? ??

(3).

如果中間值 小于 要找的值,

舍棄中間值和中間值左邊的所有數(shù),調(diào)整 左下標left left = mid + 1

如果中間值 大于 要找的值,

舍棄中間值和中間值右邊的所有數(shù)調(diào)整 右下標rightright = mid -?1。

如果中間值 等于?要找的值,

返回中間值下標mid。

? ? ? ? ? ? ? ?

(4). 找不到返回 -1

? ? ? ? ? ? ? ? ? ? ?

實現(xiàn)代碼:

int binary_search(int arr[], int k, int sz)//形參
{
	int left = 0; //左下標
	int right = sz - 1; //右下標

	//使用while循環(huán)
	while (left <= right)
	{
		//生成中間值下標 mid :
		int mid = left + (right - left) / 2;

		//二分查找:
		if (arr[mid] < k)//中間值 小于 要找的值
		{
			left = mid + 1;
			//舍棄中間值和中間值左邊的所有數(shù),
			//調(diào)整 左下標left :left = mid + 1。
		}
		else if (arr[mid] > k)//中間值 大于 要找的值
		{
			right = mid - 1;
			//舍棄中間值和中間值右邊的所有數(shù),
			//調(diào)整 右下標right :right = mid -?1。
		}
		else if (arr[mid] == k)//中間值 等于?要找的值
		{
			return mid;
			//返回中間值下標mid。
		}
	} 
	if (left > right)
	{
		return -1; //找不到則返回-1
	}
}

實現(xiàn)圖片:

C語言:寫一個函數(shù),實現(xiàn)一個整型有序數(shù)組的二分查找

? ? ? ? ? ? ? ? ?


? ? ? ? ? ? ? ? ?

主函數(shù)部分:

(1). 定義有序數(shù)組,設置要查找的值,求出數(shù)組元素個數(shù)。

? ? ? ? ? ? ? ?

(2). 調(diào)用自定義函數(shù)

? ? ? ? ? ? ? ??

(3). 判斷自定義函數(shù)返回值,打印相應的情況

? ? ? ? ? ? ? ? ? ? ?

實現(xiàn)代碼:

#include <stdio.h>

int binary_search(int arr[], int k, int sz)//形參
{
	int left = 0; //左下標
	int right = sz - 1; //右下標

	//使用while循環(huán)
	while (left <= right)
	{
		//生成中間值下標 mid :
		int mid = left + (right - left) / 2;

		//二分查找:
		if (arr[mid] < k)//中間值 小于 要找的值
		{
			left = mid + 1;
			//舍棄中間值和中間值左邊的所有數(shù),
			//調(diào)整 左下標left :left = mid + 1。
		}
		else if (arr[mid] > k)//中間值 大于 要找的值
		{
			right = mid - 1;
			//舍棄中間值和中間值右邊的所有數(shù),
			//調(diào)整 右下標right :right = mid -?1。
		}
		else if (arr[mid] == k)//中間值 等于?要找的值
		{
			return mid;
			//返回中間值下標mid。
		}
	} 
	if (left > right)
	{
		return -1; //找不到則返回-1
	}
}

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; //定義有序數(shù)組
	int k = 7; //設置要查找的值
	int sz = sizeof(arr) / sizeof(arr[0]); //求出數(shù)組元素個數(shù)
	// 整個數(shù)組大小 / 單個數(shù)組元素大小 = 數(shù)組元素個數(shù)

	//調(diào)用自定義函數(shù):
	int ret = binary_search(arr, k, sz); //ret接收返回的下標

	//判斷自定義函數(shù)的返回值,打印相應的情況:
	if (ret == -1) //未找到,返回-1
	{
		printf("找不到\n");
	}
	else
	{
		printf("找到了,下標是:%d\n", ret);
	}

	return 0;
}

實現(xiàn)圖片:

C語言:寫一個函數(shù),實現(xiàn)一個整型有序數(shù)組的二分查找

? ? ? ? ? ? ? ? ? ??

最終代碼和實現(xiàn)效果

最終代碼:

#include <stdio.h>

int binary_search(int arr[], int k, int sz)//形參
{
	int left = 0; //左下標
	int right = sz - 1; //右下標

	//使用while循環(huán)
	while (left <= right)
	{
		//生成中間值下標 mid :
		int mid = left + (right - left) / 2;

		//二分查找:
		if (arr[mid] < k)//中間值 小于 要找的值
		{
			left = mid + 1;
			//舍棄中間值和中間值左邊的所有數(shù),
			//調(diào)整 左下標left :left = mid + 1。
		}
		else if (arr[mid] > k)//中間值 大于 要找的值
		{
			right = mid - 1;
			//舍棄中間值和中間值右邊的所有數(shù),
			//調(diào)整 右下標right :right = mid -?1。
		}
		else if (arr[mid] == k)//中間值 等于?要找的值
		{
			return mid;
			//返回中間值下標mid。
		}
	} 
	if (left > right)
	{
		return -1; //找不到則返回-1
	}
}

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; //定義有序數(shù)組
	int k = 7; //設置要查找的值
	int sz = sizeof(arr) / sizeof(arr[0]); //求出數(shù)組元素個數(shù)
	// 整個數(shù)組大小 / 單個數(shù)組元素大小 = 數(shù)組元素個數(shù)

	//調(diào)用自定義函數(shù):
	int ret = binary_search(arr, k, sz); //ret接收返回的下標

	//判斷自定義函數(shù)的返回值,打印相應的情況:
	if (ret == -1) //未找到,返回-1
	{
		printf("找不到\n");
	}
	else
	{
		printf("找到了,下標是:%d\n", ret);
	}

	return 0;
}

實現(xiàn)效果:

C語言:寫一個函數(shù),實現(xiàn)一個整型有序數(shù)組的二分查找文章來源地址http://www.zghlxwxcb.cn/news/detail-481979.html

到了這里,關(guān)于C語言:寫一個函數(shù),實現(xiàn)一個整型有序數(shù)組的二分查找的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關(guān)文章

  • 二分查找:34. 在排序數(shù)組中查找元素的第一個和最后一個位置

    二分查找:34. 在排序數(shù)組中查找元素的第一個和最后一個位置

    個人主頁 : 個人主頁 個人專欄 : 《數(shù)據(jù)結(jié)構(gòu)》 《C語言》《C++》《算法》 本篇文章僅是作為小白的我的一些理解,,如果有錯誤的地方,希望大佬們指出。 題目鏈接: 34. 在排序數(shù)組中查找元素的第一個和最后一個位置 本題數(shù)組元素不唯一,可能存在多個target,我們就是

    2024年02月08日
    瀏覽(31)
  • 34. 在排序數(shù)組中查找元素的第一個和最后一個位置(二分查找)

    二分查找到目標值然后左右找到坐標 問題在于:找左右坐標的時候時間復雜度不是 O(logN) 之前提到過二分查找不僅可找到相等的數(shù)值,更關(guān)鍵的是 它可以將數(shù)組分為截然不同的兩種情況 ,因此我們可以借助這個性質(zhì)找到 第一個大于等于 target 的值(左下標) 和 第一個大于

    2024年01月22日
    瀏覽(35)
  • 二分查找實例1(在排序數(shù)組中查找元素的第一個和最后一個位置)

    二分查找實例1(在排序數(shù)組中查找元素的第一個和最后一個位置)

    給你一個按照非遞減順序排列的整數(shù)數(shù)組? nums ,和一個目標值? target 。請你找出給定目標值在數(shù)組中的開始位置和結(jié)束位置。 如果數(shù)組中不存在目標值? target ,返回? [-1, -1] 。 你必須設計并實現(xiàn)時間復雜度為? O(log n) ?的算法解決此問題。 示例 1: 示例?2: 示例 3: 提示

    2024年02月09日
    瀏覽(21)
  • 二分查找(C語言實現(xiàn))

    二分查找(C語言實現(xiàn))

    二分查找的前提: 一個整形有序數(shù)組中 查找具體某個數(shù) 以下以數(shù)組元素為偶數(shù)個做例 ??二分查找(折半查找)的思想:對于已按排序的序列,經(jīng)過一次比較,可將序列分割成兩部分,然后只在有可能包含待查元素的一部分中繼續(xù)查找,并根據(jù)試探結(jié)果繼續(xù)分割,逐

    2024年02月11日
    瀏覽(19)
  • Java 語言實現(xiàn)二分查找算法

    【引言】 二分查找算法是一種高效且常用的查找算法。它適用于已排序的數(shù)組或列表,并通過將目標值與中間值進行比較,來確定目標值在左側(cè)還是右側(cè)。本文將使用Java語言實現(xiàn)二分查找算法,并詳細講解其思想和代碼實現(xiàn)。 【算法思想】 二分查找的核心思想是不斷縮小查

    2024年02月11日
    瀏覽(46)
  • 【C語言】二分查找的實現(xiàn)

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

    前言 在我們?nèi)粘I钪?,?jīng)常會遇到查找一樣東西的情景,比如在一個班的學生成績中找到xx分對應的人 我們可以嘗試用c語言程序解決這類查找問題 我們可以很容易寫出這樣的代碼 這里數(shù)組arr中只有十個元素,那如果有100個,1000個,100000000…000個呢? 考慮最壞的情況,我

    2024年02月07日
    瀏覽(25)
  • 【題解】二分查找-I、二維數(shù)組中的查找

    題目鏈接:二分查找-I 解題思路:遍歷 代碼如下: 這種解題思路很明顯沒有很好的利用題目中強調(diào)的數(shù)組是升序的,既然是升序,那肯定前半部分偏小,后半部分偏大,如果我們能知道應該去前半部分還是后半部分尋找target,效率相對就提升很多了,于是我們有了下面的分

    2024年02月14日
    瀏覽(19)
  • Leecode力扣704數(shù)組二分查找

    題目鏈接為:https://leetcode.cn/problems/binary-search/ 最終代碼為: ? 一開始自己寫的??粑代碼為: 問題: C老師的指點和思路: 您的思路是正確的,您正在使用二分搜索法來在有序數(shù)組中查找目標值。但是,您的代碼有幾個問題需要修復: 如果數(shù)組中沒有找到目標值,while循環(huán)

    2024年02月13日
    瀏覽(22)
  • Java---第四章(數(shù)組基礎,冒泡排序,二分查找,多維數(shù)組)

    Java---第四章(數(shù)組基礎,冒泡排序,二分查找,多維數(shù)組)

    概念: 數(shù)組是編程語言中的一種常見的數(shù)據(jù)結(jié)構(gòu),能夠存儲一組相同類型的數(shù)據(jù) 作用: 存儲一組相同類型的數(shù)據(jù),方便進行數(shù)理統(tǒng)計(求最大值,最小值,平均值以及總和),也可以進行信息的展示 定義: 第一種: 只能在定義數(shù)組同時賦值時使用 第二種: 可以在定義數(shù)組

    2024年02月09日
    瀏覽(23)
  • LeetCode-74. 搜索二維矩陣【數(shù)組 二分查找 矩陣】

    LeetCode-74. 搜索二維矩陣【數(shù)組 二分查找 矩陣】

    給你一個滿足下述兩條屬性的 m x n 整數(shù)矩陣: 每行中的整數(shù)從左到右按非嚴格遞增順序排列。 每行的第一個整數(shù)大于前一行的最后一個整數(shù)。 給你一個整數(shù) target ,如果 target 在矩陣中,返回 true ;否則,返回 false 。 示例 1: 輸入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]],

    2024年04月14日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包