有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出"无此数"


有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出"无此数"

【答案解析】

二分查找是一个非常高效简单的查找算法,笔试和面试中非常喜欢考察。

折半查找又叫二分查找,查找的前提是序列中元素必须有序,假设区间使用[left, right)标记,待查找元素为key,具体查找的方式如下:当区间[left, right)有效时循环进行一下操作

  1. 找到[left, right)区间中间位置
  2. 如果key等于中间位置元素,则找到,返回该元素在数组中的下标
  3. 如果key小于中间位置元素,到数组的左半侧继续二分查找
  4. 如果key大于中间位置元素,到数组的右半侧继续二分查找

如果循环结束时还没有找到,则不存在该元素。

【代码实现】

#include<stdio.h>
int main()
{
	int array[15] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};
	int left = 0;
	int right = sizeof(array) / sizeof(array[0]);
	int key = 0;

	printf("请输入要查找的数字: ");
	scanf("%d", &key);

	// 二分查找
	while (left < right)
	{
		// 找到中间位置
		int mid = left + ((right - left) >> 1);
		if (key == array[mid])
		{
			printf("%d\n", mid);
			break;
		}
		else if (key < array[mid])
		{
			right = mid;
		}
		else
		{
			left = mid + 1;
		}
	}

	if (left >= right)
		printf("无此数\n");
	return 0;
}

【结果截屏】

假设数组中元素为:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出"无此数"


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 删除数组元素 功能描述:有一个有序整数数组,要求输入一个数字, 在数组中查找是否有这个数,如果有,将该数从数组中删除, 要求删除后的数组仍然保持有序; promise顺序执行,返回结果存放在数组 写几个函数: ①输人10个职工的姓名和职工号; ②按职工号由小到大顺序排序,姓名顺序也随之调整; ③要求输人一个职工号,用折半查找法找出该职工的姓名,从主函数输人要查找的职工号,输出该职工姓名。 定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出 Leetcode练习(Python):第66题:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 编一个程序,输入10个整数,并放在数组中,先降序输出全部的数,再统计并输出当中正数、负数和零的个数 用指针编写程序,把10个整数存放在一个一维数组中,将其中最小的数与第一个数对换,把最大的数与最后一个数对换 有一个已经排好序的数组,要求输入一个数后,按原来顺序的规律将它插入数组中 用C#设计控制台应用程序,输入若干学生的英语和数学成绩,求出总分,并按总分从高到低排序。要求设计一个学生类 Student,所有学生对象存放在一个 Student对象数组中,通过一个方法对其按照总分进行降序排序,最后输出排序后的结果 (二分查找)输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数,则输出数组长度加一。
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM