二分查找
Posted kmxojer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找相关的知识,希望对你有一定的参考价值。
分治法的基本思想:
将一个问题规模为n的问题分解成k个规模较小的子问题,这些子问题互相独立且与原问题相同。用递归的方式解这些子问题,将子问题的解合并得到原问题的解。
二分查找:
就是将一个序列(排好序的)分成两部分,如果a[mid]==key就返回mid,若大于就搜索左边,否则搜索右边。
题目描述:
第一行输入n;
第二行输入n个整数;
第三行输入m;
然后输入m个整数,分别判断该数是否在n个整数中,若在输出Yes,否则输出No;
代码实现如下:
#include <stdio.h> int n; int binarySearch(int a[],long key) { int left = 0; int right = n; while(left<=right) { int mid = (left+right)/2; if(a[mid]==key) { return mid; } else if(a[mid]<key) { left = mid+1; } else { right = mid - 1; } } return -1; } int main() { int array[10001]; int i; int m; long q; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&array[i]); scanf("%d",&m); while(m--) { scanf("%ld",&q); if(binarySearch(array,q)>=0) printf("Yes "); else printf("No "); } return 0; }
以上是关于二分查找的主要内容,如果未能解决你的问题,请参考以下文章