zoukankan      html  css  js  c++  java
  • 有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个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出"无此数"

  • 相关阅读:
    SpringBoot 之 静态资源路径、显示首页、错误页
    微擎框架的缓存机制实现源码解读
    SpringBoot 之 多环境切换
    SpringBoot 之 JSR303 数据校验
    CSS——NO.6(盒模型)
    CSS——NO.5(格式化排版)
    CSS——NO.4(继承、层叠、特殊性、重要性)
    CSS——NO.3(CSS选择器)
    CSS——NO.2(CSS样式的基本知识)
    CSS——NO.1(初识CSS)
  • 原文地址:https://www.cnblogs.com/weiyidedaan/p/13666766.html
Copyright © 2011-2022 走看看