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

  • 相关阅读:
    PE格式第五讲,手工添加节表
    PE格式第四讲,数据目录表之导入表,以及IAT表
    PE格式第三讲扩展,VA,RVA,FA(RAW),模块地址的概念
    PE文件格式详解,第三讲,可选头文件格式,以及节表
    PE文件格式详解,第二讲,NT头文件格式,以及文件头格式
    LVS
    Haproxy
    Nginx
    MySQL入门第一天——概述、数据表与约束操作
    NoSQL入门第五天——Java连接与整合操作
  • 原文地址:https://www.cnblogs.com/inta/p/13330673.html
Copyright © 2011-2022 走看看