返回有序数组中你想要查找数字的下表,找不到返回-1(折半查找)

本文详细介绍了如何在整型有序数组中使用折半查找算法来查找特定数字,并提供了完整的C语言代码实现。通过定义数组、确定查找范围和迭代比较,算法能够高效地返回目标数字的下标或未找到的标志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 //写代码可以在整型有序数组中查找想要的数字, 找到了返回下标,找不到返回 - 1.(折半查找)

    解决思路:

          全局分析://定义数组和判断数组中的元素个数

                            //判断是否查到到你想要的数字

                            //确定返回值
          //代码实现如下:

#include<stdio.h>
#include<stdlib.h>

//写代码可以在整型有序数组中查找想要的数字, 找到了返回下标,找不到返回 - 1.(折半查找)

int main()
{
	//定一个整形数组
	int arr[] = { 1, 2, 3, 4, 5 };
	//判断数组中元素的总数
	int to_find = 4;
	int left = 0;
	int right = sizeof(arr) / sizeof(arr[0]) - 1;
	int mid = 0;
	//判断是否查找到想要的数字
	while (left <= right)
	{
		mid = (left + right) / 2;
		if (to_find < arr[mid])
		{
			right = mid - 1;
		}
		else if (to_find > arr[mid])
		{
			left = mid + 1;
		}
		else
		{
			break;
		}
	}
	if (left <= right)
	{
		printf("下表为 :%d\n", mid);
	}
	else
	{
		printf("%d\n", -1);
	}
	system("pause");
	return 0;
}

//运行结果:

                                                       

持之以恒,做人生赢家。

 

1)在C语言中设计一个有序数组,通常我们可以创建一个结构体数组元素并添加一个排序功能。这里是一个简单的例子,假设我们有一个整数数组: ```c #include <stdio.h> // 定义数组元素结构 typedef struct { int value; int index; // 用于存储实际位置 } ArrayElement; // 函数声明,用于插入新元素并保持数组有序 void insert_sorted(ArrayElement* array, int value); int main() { // 初始化数组大小 const size_t ARRAY_SIZE = 10; ArrayElement* sorted_array = malloc(sizeof(ArrayElement) * ARRAY_SIZE); // 插入初始值(例如从小到大) for (size_t i = 0; i < ARRAY_SIZE; ++i) { sorted_array[i].value = i + 1; sorted_array[i].index = i; } // 添加新的元素并保持有序 insert_sorted(sorted_array, 5); // 如果我们要插入5 return 0; } // 插入函数 void insert_sorted(ArrayElement* array, int value) { int i; for (i = 0; i < ARRAY_SIZE && array[i].value < value; ++i) {} if (i == ARRAY_SIZE) array[ARRAY_SIZE - 1].index = i; // 如果已经满,插到最后 else array[i].index = i + 1; // 交换现有元素的位置 array[i].value = value; } ``` (2)在数组中使用折半查找查找特定数字,可以按照以下步骤: ```c // 折半查找函数 int binary_search(ArrayElement* array, int target) { int left = 0, right = ARRAY_SIZE - 1; while (left <= right) { int mid = left + (right - left) / 2; if (array[mid].value == target) return array[mid].index; else if (array[mid].value < target) left = mid + 1; else right = mid - 1; } return -1; // 如果不到目标,返回-1 } ``` 然后在`main`函数里调用`binary_search`函数寻指定数值的位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值