C语言巧用二分查找实现猜数游戏

 更新时间:2022年02月09日 10:41:20   作者:玄澈_  
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列,本篇文章教你用二分查找编写猜数字游戏

✨✨ 文章Gitee仓库:文章源代码

(壹)二分查找

📚  1.1  何为二分查找

折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高。但是该算法的使用的前提是静态查找表中的数据必须是有序的。

例如,在{5,21,13,19,37,75,56,64,88 ,80,92}这个查找表使用折半查找算法查找数据之前,需要首先对该表中的数据按照所查的关键字进行排序:{5,13,19,21,37,56,64,75,80,88,92}。

📚  1.2  二分查找的原理

以升序数列为例,比较一个元素与数列中的中间位置的元素的大小,如果比中间位置的元素大,则继续在后半部分的数列中进行二分查找;如果比中间位置的元素小,则在数列的前半部分进行比较;如果相等,则找到了元素的位置。每次比较的数列长度都会是之前数列的一半,直到找到相等元素的位置或者最终没有找到要找的元素。

动图演示:(于顺序查找相比较)

📚  1.3  查找条件

二分查找的前提条件是有序数列,普通查找则不需要。

查找到返回该元素的下标,否则返回-1。

普通查找的时间复杂度为O(N), 二分查找的时间复杂度为O(logN)。 N/2/2···/2=1,2^m=N(m为折半查找的次数),那么m=log(N),二分查找的时间复杂度就为O(logN)。

📚  1.4  代码实现

🎨 1.4.1  初始化数据

🎨 1.4.2  核心函数

(贰)猜数字游戏 

📚  2.1  菜单初始化

📚  2.2  核心函数

📚  2.3  main函数

📚  2.4  总代码

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void menu()
{
	printf("**********************************\n");
	printf("*********** 1.play     ***********\n");
	printf("*********** 0.exit     ***********\n");
	printf("**********************************\n");
}
 
//RAND_MAX--rand函数能返回随机数的最大值。
void game()
{
	int random_num = rand() % 100 + 1;
	int input = 0;
	while (1)
	{
		printf("请输入猜的数字>:");
		scanf("%d", &input);
		if (input > random_num)
		{
			printf("猜大了\n");
		}
		else if (input < random_num)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n"); break;
		}
	}
}
 
int main()
{
	int input = 0;
	srand((unsigned)time(NULL));
	do
	{
		menu();
		printf("请选择>:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			printf("选择错误,请重新输入!\n");
			break;
		}
	} while (input);
	return 0;
}

到此这篇关于C语言巧用二分查找实现猜数游戏 的文章就介绍到这了,更多相关C语言 二分查找内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Qt生成Word和PDF文档的详细教程

    使用Qt生成Word和PDF文档的详细教程

    Qt 是一个跨平台的应用程序开发框架,除了用于创建图形界面应用程序外,还可以用来生成 Word 和 PDF 文档,本文将介绍如何使用 Qt 来生成Word和PDF文档,以及相关的代码示例,需要的朋友可以参考下
    2023-10-10
  • C++实现信息管理系统

    C++实现信息管理系统

    这篇文章主要为大家详细介绍了C++实现信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • QT定时器事件的实现示例

    QT定时器事件的实现示例

    本文介绍了QT定时器事件的概念和原理,阐述了其工作方式及实现方法,QT定时器事件可以用于在一定时间间隔内执行特定的任务,从而实现定时操作和控制,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • C++中const、volatile、mutable使用方法小结

    C++中const、volatile、mutable使用方法小结

    这篇文章主要介绍了C++中const、volatile、mutable使用方法小结,需要的朋友可以参考下
    2020-01-01
  • C语言与C++中const的用法对比

    C语言与C++中const的用法对比

    C语言中的const与C++有很大的不同,在C语言中用const修饰的变量仍是一个变量,表示这个变量是只读的,不可显示地更改,而在C++中用const修饰过后,就变成常量了
    2022-04-04
  • 关于C语言qsort函数详解

    关于C语言qsort函数详解

    这篇文章主要介绍了关于C语言qsort函数详解的相关资料,需要的朋友可以参考下面文章内容
    2021-09-09
  • C语言函数超详细讲解下篇

    C语言函数超详细讲解下篇

    函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数,函数我们分两篇来讲解,接下来开始第二篇
    2022-04-04
  • C++实现LeetCode(904.水果装入果篮)

    C++实现LeetCode(904.水果装入果篮)

    这篇文章主要介绍了C++实现LeetCode(904.水果装入果篮),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++顺序表的实例代码

    C++顺序表的实例代码

    这篇文章主要为大家详细介绍了C++实现顺序表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • C语言实现恶作剧关机程序

    C语言实现恶作剧关机程序

    大家好,本篇文章主要讲的是C语言实现恶作剧关机程序,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01

最新评论