C语言:写一个函数,实现一个整型有序数组的二分查找

这篇具有很好参考价值的文章主要介绍了C语言:写一个函数,实现一个整型有序数组的二分查找。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目:

写一个函数,实现一个整型有序数组二分查找,找出要找的数字数组中对应的下标

                    

 =========================================================================

                       

思路:

总体思路:

(一)自定义函数部分:

                

(1).

参数:

int arr[] -- 数组首地址

 int k -- 要在数组中找的数字

 int sz -- 数组长度

              

定义左右下标

                   

(2).

使用二分查找法

               

(二)主函数部分:

           

定义有序数组,设置要查找的值,求出数组元素个数

               

调用自定义函数

               

判断自定义函数的返回值打印相应的情况

                


                 

自定义函数部分:

第一步:

(1). 形参的设置:

int arr[] -- 数组首地址

int k -- 要在数组中找的数字

int sz -- 数组长度

             

(2). 定义左右下标 -- left right

                     

实现代码:

#include <stdio.h>

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


}

int main()
{

	return 0;
}

实现图片:

C语言:写一个函数,实现一个整型有序数组的二分查找

                 


                 

第二步:

使用二分查找方法

         

(1). 使用while循环

          

(2). 生成中间值下标 mid

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

left 小的一边(right - left)两者的差值(right - left)/ 2 差值的一半

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

这时 两边是一样的任意一边都是平均值中间值

              

(3).

如果中间值 小于 要找的值

舍弃中间值和中间值左边的所有数调整 左下标left left = mid + 1

如果中间值 大于 要找的值

舍弃中间值和中间值右边的所有数调整 右下标rightright = mid - 1

如果中间值 等于 要找的值

返回中间值下标mid

               

(4). 找不到返回 -1

                     

实现代码:

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

	//使用while循环
	while (left <= right)
	{
		//生成中间值下标 mid :
		int mid = left + (right - left) / 2;

		//二分查找:
		if (arr[mid] < k)//中间值 小于 要找的值
		{
			left = mid + 1;
			//舍弃中间值和中间值左边的所有数,
			//调整 左下标left :left = mid + 1。
		}
		else if (arr[mid] > k)//中间值 大于 要找的值
		{
			right = mid - 1;
			//舍弃中间值和中间值右边的所有数,
			//调整 右下标right :right = mid - 1。
		}
		else if (arr[mid] == k)//中间值 等于 要找的值
		{
			return mid;
			//返回中间值下标mid。
		}
	} 
	if (left > right)
	{
		return -1; //找不到则返回-1
	}
}

实现图片:

C语言:写一个函数,实现一个整型有序数组的二分查找

                 


                 

主函数部分:

(1). 定义有序数组,设置要查找的值,求出数组元素个数

               

(2). 调用自定义函数

                

(3). 判断自定义函数返回值打印相应的情况

                     

实现代码:

#include <stdio.h>

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

	//使用while循环
	while (left <= right)
	{
		//生成中间值下标 mid :
		int mid = left + (right - left) / 2;

		//二分查找:
		if (arr[mid] < k)//中间值 小于 要找的值
		{
			left = mid + 1;
			//舍弃中间值和中间值左边的所有数,
			//调整 左下标left :left = mid + 1。
		}
		else if (arr[mid] > k)//中间值 大于 要找的值
		{
			right = mid - 1;
			//舍弃中间值和中间值右边的所有数,
			//调整 右下标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 }; //定义有序数组
	int k = 7; //设置要查找的值
	int sz = sizeof(arr) / sizeof(arr[0]); //求出数组元素个数
	// 整个数组大小 / 单个数组元素大小 = 数组元素个数

	//调用自定义函数:
	int ret = binary_search(arr, k, sz); //ret接收返回的下标

	//判断自定义函数的返回值,打印相应的情况:
	if (ret == -1) //未找到,返回-1
	{
		printf("找不到\n");
	}
	else
	{
		printf("找到了,下标是:%d\n", ret);
	}

	return 0;
}

实现图片:

C语言:写一个函数,实现一个整型有序数组的二分查找

                    

最终代码和实现效果

最终代码:

#include <stdio.h>

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

	//使用while循环
	while (left <= right)
	{
		//生成中间值下标 mid :
		int mid = left + (right - left) / 2;

		//二分查找:
		if (arr[mid] < k)//中间值 小于 要找的值
		{
			left = mid + 1;
			//舍弃中间值和中间值左边的所有数,
			//调整 左下标left :left = mid + 1。
		}
		else if (arr[mid] > k)//中间值 大于 要找的值
		{
			right = mid - 1;
			//舍弃中间值和中间值右边的所有数,
			//调整 右下标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 }; //定义有序数组
	int k = 7; //设置要查找的值
	int sz = sizeof(arr) / sizeof(arr[0]); //求出数组元素个数
	// 整个数组大小 / 单个数组元素大小 = 数组元素个数

	//调用自定义函数:
	int ret = binary_search(arr, k, sz); //ret接收返回的下标

	//判断自定义函数的返回值,打印相应的情况:
	if (ret == -1) //未找到,返回-1
	{
		printf("找不到\n");
	}
	else
	{
		printf("找到了,下标是:%d\n", ret);
	}

	return 0;
}

实现效果:

C语言:写一个函数,实现一个整型有序数组的二分查找文章来源地址https://www.toymoban.com/news/detail-481979.html

到了这里,关于C语言:写一个函数,实现一个整型有序数组的二分查找的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 二分查找:34. 在排序数组中查找元素的第一个和最后一个位置

    个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C++》《算法》 本篇文章仅是作为小白的我的一些理解,,如果有错误的地方,希望大佬们指出。 题目链接: 34. 在排序数组中查找元素的第一个和最后一个位置 本题数组元素不唯一,可能存在多个target,我们就是

    2024年02月08日
    浏览(48)
  • 34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)

    二分查找到目标值然后左右找到坐标 问题在于:找左右坐标的时候时间复杂度不是 O(logN) 之前提到过二分查找不仅可找到相等的数值,更关键的是 它可以将数组分为截然不同的两种情况 ,因此我们可以借助这个性质找到 第一个大于等于 target 的值(左下标) 和 第一个大于

    2024年01月22日
    浏览(52)
  • 二分查找实例1(在排序数组中查找元素的第一个和最后一个位置)

    给你一个按照非递减顺序排列的整数数组  nums ,和一个目标值  target 。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值  target ,返回  [-1, -1] 。 你必须设计并实现时间复杂度为  O(log n)  的算法解决此问题。 示例 1: 示例 2: 示例 3: 提示

    2024年02月09日
    浏览(46)
  • 二分查找(C语言实现)

    二分查找的前提: 一个整形有序数组中 查找具体某个数 以下以数组元素为偶数个做例   二分查找(折半查找)的思想:对于已按排序的序列,经过一次比较,可将序列分割成两部分,然后只在有可能包含待查元素的一部分中继续查找,并根据试探结果继续分割,逐

    2024年02月11日
    浏览(54)
  • Java 语言实现二分查找算法

    【引言】 二分查找算法是一种高效且常用的查找算法。它适用于已排序的数组或列表,并通过将目标值与中间值进行比较,来确定目标值在左侧还是右侧。本文将使用Java语言实现二分查找算法,并详细讲解其思想和代码实现。 【算法思想】 二分查找的核心思想是不断缩小查

    2024年02月11日
    浏览(34)
  • 【C语言】二分查找的实现

    前言 在我们日常生活中,经常会遇到查找一样东西的情景,比如在一个班的学生成绩中找到xx分对应的人 我们可以尝试用c语言程序解决这类查找问题 我们可以很容易写出这样的代码 这里数组arr中只有十个元素,那如果有100个,1000个,100000000…000个呢? 考虑最坏的情况,我

    2024年02月07日
    浏览(31)
  • 【题解】二分查找-I、二维数组中的查找

    题目链接:二分查找-I 解题思路:遍历 代码如下: 这种解题思路很明显没有很好的利用题目中强调的数组是升序的,既然是升序,那肯定前半部分偏小,后半部分偏大,如果我们能知道应该去前半部分还是后半部分寻找target,效率相对就提升很多了,于是我们有了下面的分

    2024年02月14日
    浏览(42)
  • Leecode力扣704数组二分查找

    题目链接为:https://leetcode.cn/problems/binary-search/ 最终代码为:   一开始自己写的🐕粑代码为: 问题: C老师的指点和思路: 您的思路是正确的,您正在使用二分搜索法来在有序数组中查找目标值。但是,您的代码有几个问题需要修复: 如果数组中没有找到目标值,while循环

    2024年02月13日
    浏览(42)
  • Java---第四章(数组基础,冒泡排序,二分查找,多维数组)

    概念: 数组是编程语言中的一种常见的数据结构,能够存储一组相同类型的数据 作用: 存储一组相同类型的数据,方便进行数理统计(求最大值,最小值,平均值以及总和),也可以进行信息的展示 定义: 第一种: 只能在定义数组同时赋值时使用 第二种: 可以在定义数组

    2024年02月09日
    浏览(50)
  • 【算法】【算法杂谈】旋转数组的二分法查找

    当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识! 原问题 给定一个从小到大有序的数组,该数组存在重复的数,并且该数组可能经过旋转处理,如arr = [1,2,3,4,5,6,7]代表数组未旋

    2024年02月06日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包