IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C语言 G - 二分法+时间复杂度(简单) -> 正文阅读

[数据结构与算法]C语言 G - 二分法+时间复杂度(简单)

蒜头君手上有个长度为?nn?的数组?AA。由于数组实在太大了,所以蒜头君也不知道数组里面有什么数字,所以蒜头君会经常询问整数?xx?是否在数组?AA?中。

输入格式

第一行输入两个整数?nn?和?mm,分别表示数组的长度和查询的次数。

接下来一行有?nn?个整数?a_iai?。

接下来?mm?行,每行有?11?个整数?xx,表示蒜头君询问的整数。

输出格式

对于每次查询,如果可以找到,输出"YES",否则输出"NO"

数据范围

1 \le n, m \le 10^5, 0 \le x \le 10^61≤n,m≤105,0≤x≤106。

Sample Input

10 5
1 1 1 2 3 5 5 7 8 9
0
1
4
9
10

Sample Output

NO
YES
NO
YES
NO

思路:

运用两次数组将寻找的数组和待寻找的数组记录下来,先将输入的数组用函数排序之后再将排序后的数组用二分法一一比对,注意要先将所有的待寻找的数据用数组记录下来再将数组中的数一次进入二分法运用寻找是否存在之后输出判断

#include <stdio.h>
void quicksort (int left,int right,int arr[])
{
	int i,j,t,temp;
	if (left>right)
	return;
	temp=arr[left];//temp中存的就是基准数 
	i=left;
	j=right;
	while (i!=j)
	{
		//注意顺序,一定要先右后左 
		while (arr[j]>=temp&&i<j)
		j--;
		while (arr[i]<=temp&&i<j)
		i++;
		//交换两个数在数组中的位置 
		if (i<j)//当哨兵ij在数组中没有相遇时 
		{
			t=arr[i];
			arr[i]=arr[j];
			arr[j]=t;
		}
	}
	//将基准数归位 
	arr[left]=arr[i];
	arr[i]=temp;
	//递归 
	quicksort(left,i-1,arr);
	quicksort(i+1,right,arr);
	return;
}
int main ()
{
 int n,m,i;
 scanf("%d %d",&n,&m);
 int arr[n];
 int number[m];
 int sz;//定义数组长度
 for (i=0;i<n;i++)
 {
  scanf("%d",&arr[i]);
 }
 quicksort (0,n-1,arr);//调用函数排序
 sz=sizeof (arr)/sizeof(arr[0]);//计算数组长度
 for (i=0;i<m;i++)//用数组记录需要寻找的数
 {
  scanf("%d",&number[i]);
  int getchar();//去掉回车
 }
 for (i=0;i<m;i++)//用二分法判断数组
 {
  int left=0;
   int right=sz-1;
  while (left<=right)
  {
   int mid=(left+right)/2;
   if (number[i]<arr[mid])
   {
    right=mid-1;
   }
   else if (number[i]>arr[mid])
   {
    left=mid+1;
   }
   else
   {
    printf("YES\n");
    break;
   }
  }
  if (left>right)
  {
   printf("NO\n");
  }
 }
 return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-17 13:00:34  更:2021-11-17 13:02:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:51:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码