栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

二分法+时间复杂度(简单) c语言

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二分法+时间复杂度(简单) c语言

小明有个长度为 n 的数组 A。由于数组实在太大了,所以小明也不知道数组里面有什么数字,所以小明会经常询问整数 x 是否在数组 A 中。

输入格式

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

接下来一行有 n 个整数 ;

接下来 m 行,每行有 1 个整数 x,表示小明询问的整数。

输出格式

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

数据范围很大,建议使用快速排序;

例:

输入:

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

输出:

NO
YES
NO
YES
NO

整体思路:首先输入n,m的值;用for循环和数组记录n个数;在使用二分法前,我们必须将数组里面的数进行排序,当数组里面的数非常多时;我们使用快速排序能够节省很多时间,也就是我们常说的时间复杂度,排序后,使用二分法寻找输入的值即可。快速排序在此不细讲,需要的可以查看我的文章。

#include 
void quicksort(int arr[],int low,int high){  //利用快速排序将输入的n个数从小到大排序;
 int first=low;                //用first 和 last分别接受 low 和high的值,便于下面递归再次
 int last=high;                 //使用 low 和high 就不用重新定义了。
 int key=arr[first];           // 定义一个key ,一般为数组的第一个数;
 if(low>=high)                  
 return ;
 while(first=key){ //从后往前 与key进行比较,如果大于key 则不动;然后
   last--;                            // last--,倒数第二个数再与key比较;如果小于key;
  }
  arr[first]=arr[last];               //将该值赋给第一个位置;然后再进行到下一步
  while(firstarr[mid]) left=mid+1;//right 为角标;同理 当arr[mid]right) printf("NOn"); 
}
int main()
{
 int n,m;  int i,j; 
 scanf("%d %d",&n,&m);   // 输入n值和m值;n为总的人数,m为标记点;
 int arr[n];int arr2[m];  //定义两个数组,数组长度分别为n和m;
 for(i=0;i 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/588670.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号