2016/7/7 二分警察(搜查)~#递归打法好!

还是一上来就给源码的傲娇~

源码:

#include<stdio.h>
int b[10]={1,1,2,3,3,5,6,6,7,9},a;                        //设置全局数组b和实数a
int tt(int m,int n)                                  //定义函数tt
{
int z;
if(m<=n)
{
z=(m+n)/2;
if(b[z]==a)

{

return z;

}
if(a<b[z])

{

return tt(m,z-1);

}
else {

return tt(z+1,n);

}
}
return 0;
}
int main()
{
int x=0,y=9;
scanf("%d",&a);
if(tt(x,y)==0)

{

printf("no");

}
else
printf("%d",tt(x,y));
return 0;
}

回头更新!速度睡觉了!

时间: 2024-10-06 00:29:08

2016/7/7 二分警察(搜查)~#递归打法好!的相关文章

二分查找的递归与非递归算法

/* 二分查找的递归与非递归算法 */ #include <iostream> #include <cstdio> using namespace std; bool bisrch( int low,int high,int v,int *text ) //递归写法 { int i,mid; mid=( low+high )/2; if( low>high ) return false; if( v==text[mid] ) return true; else if( v&l

二分查找(递归与非递归)

递归的二分查找: 1 int search(int *a, int target, int p, int r) 2 { 3 if (p <= r) 4 { 5 int mid; 6 7 mid = (p + r) / 2; 8 if (*(a + mid) == target) 9 return 1; 10 else if (*(a + mid) > target) 11 return search(a, target, p, mid - 1); 12 else 13 return searc

(续)二分查找(不用递归)

接着上一篇,其实不用递归进行二分查找也很简单,当时咋就没想起来呢.. OK废话少说, show me the code 1 #include <stdio.h> 2 3 int binary_search_no_recursion(int a[], int left, int right, int key){ 4 while(left<=right){ //attention!!! 5 int mid = (left+right)/2; 6 if(key > a[mid]) 7 l

二分查找算法(递归,循环)

二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为:    1.第一步查找中间元素,即5,由于5<6,则6必然在5之后的数组元素中,那么就在{6, 7, 8, 9}中查找,    2.寻找{6, 7, 8, 9}的中位数,为7,7>6,

二分查找的递归和非递归写法

一.概述 二分查找是针对有序数列的,对无序数列是无效的,在有序序列中使用二分查找能大大提高查找效率,通常能将时间按复杂度从O(n)降至O(logn). 二.查找某数的位置(或存在性) 递归: 1 //返回"-1"表示为找到 2 //否则返回目标的下标(若有多个,只是其中一个) 3 int binary_searchs(int *arr, int target, int l, int r) 4 { 5 if (l > r) return -1; 6 int mid = (l + r

java——二分搜索树(递归、非递归)

~ import java.util.Stack; import java.util.LinkedList; import java.util.Queue; //二分搜索树 public class BST <E extends Comparable<E>> { private class Node{ public E e; public Node left, right; public Node(E e) { this.e = e; left = null; right = nu

二分查找(递归和非递归实现)

当然前提是:有序数列,这里以升序为例! public class binarySearch { public static void main(String[] args) { int arr[]={1,2,3,4,5,6,7,8,9}; int key=9; //int result=binarySearchMethod_noDiGui(arr,key);//非递归实现 int result=binarySearchMethod_DiGui(arr,0,arr.length-1,key);//

UOJ276 [清华集训2016] 汽水 【二分答案】【点分治】【树状数组】

题目分析: 这种乱七八糟的题目一看就是点分治,答案有单调性,所以还可以二分答案. 我们每次二分的时候考虑答案会不会大于等于某个值,注意到系数$k$是无意义的,因为我们可以通过转化使得$k=0$. 合并的过程相当于很多个向量,加起来后看斜率. 注意单个向量也要判定. 由于有了二分的答案$Ans$.判定变得简单多了,推一下. $-k \leq \frac{A+C}{B+D} \leq k \Rightarrow -k(B+D) \leq A+C \leq k(B+D)$. 进一步的$A+kB \ge

算法:两种方式(递归/循环)实现二分查找

程序由Golang实现,代码如下: 1.使用递归实现二分查找 //使用递归进行二分查找 func binarySearchTest() { //二分查找的数组必须是已经排好序的 nums := []int{1, 3, 5, 6, 7, 10, 12, 15, 17, 18, 19, 20, 21} value := 2 var index int = searchIndex(nums, value) fmt.Println("index:", index) } //在nums中查找元素