• 有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
    ", mid);
    			break;
    		}
    		else if (key < array[mid])
    		{
    			right = mid;
    		}
    		else
    		{
    			left = mid + 1;
    		}
    	}
    
    	if (left >= right)
    		printf("无此数
    ");
    	return 0;
    }
    

    【结果截屏】

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

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

  • 相关阅读:
    linux 安装nginx
    docker 安装redis
    c# socket初学小demo
    .NET 集成 swagger
    docker 常用命令
    docker 安装rabbitmq
    gitee为啥提交用户显示为多个,如何删除掉不要的账户,将所有的代码提交记录都记在一个账户里
    .NET 过滤器
    .NET设计文件系统
    LaTeX Workshop 配置信息
  • 原文地址:https://www.cnblogs.com/weiyidedaan/p/13666766.html
Copyright © 2020-2023  润新知