折半查找法

根据给定的某个值,在一组数据(尤其是一个数组)当中,确定有没有出现相同取值的数据元素。

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int[] a = {0,5,7,9,12,16,19,20,22,23};
        f(a,1,9,19);
    }
    public static void f(int[] a,int l,int r,int b){
        int mid = (l+r)/2;
        if(a[mid]==b){
            System.out.println(mid);
            return;
        }else if(a[mid]>b){
            f(a,l,mid,b);
        }else{
            f(a,mid,r,b);
        }
    }
}
时间: 2024-10-12 21:32:17

折半查找法的相关文章

【分治】折半查找法

问题 K: [分治]折半查找法 时间限制: 1 Sec  内存限制: 128 MB提交: 17  解决: 9[提交][状态][讨论版] 题目描述 大魔导师培根曾经说过:“读书使人明智,读诗使人聪慧,演算使人精密,哲理使人深刻,伦理学使人有修养,逻辑修辞使人善辩.”由此可见书籍的重要性是不言而喻的.而与书籍天天打交道的图书管理员,更是夺天地之造化,吸日月之精华的“神之职业”.据史料记载,魔法世界从古至今诞生的众多不平凡的人物中,有不少人都曾经做过“图书管理员”,如道家学派创始人老子,威软公司创始人

折半查找法的两种实现

折半查找法: 在有序表中,把待查找数据值与查找范围的中间元素值进行比较,会有三种情况出现: 1)     待查找数据值与中间元素值正好相等,则放回中间元素值的索引. 2)     待查找数据值比中间元素值小,则以整个查找范围的前半部分作为新的查找范围,执行1),直到找到相等的值. 3)     待查找数据值比中间元素值大,则以整个查找范围的后半部分作为新的查找范围,执行1),直到找到相等的值 4)     如果最后找不到相等的值,则返回错误提示信息. 按照二叉树来理解:中间值为二叉树的根,前半部

对分查找法(二分查找法,折半查找法)

二分查找法是针对已经排好序的序列进行查找 每次折半查找 算法时间复杂度,对于长度为N的序列,每次执行N/2,假设k次结束,最后到第一个N/2^k=0,所以k=logN 时间复杂度logN int binarysearch(const int array[], int x, int N) { int low, mid, high; low = 0, high = N - 1; while (low <= high) { mid = (low + high) / 2; if(array[mid] <

折半查找法的温习

折半查找法适合于1采用顺序存储结构的2必须按照关键字大小排序的序列查找 如代码所示: 1 #include <stdio.h> 2 3 int BinSearch(int a[], int length, int k) 4 { 5 int low = 0, high = length - 1; 6 int mid; 7 while(low <= high) 8 { 9 mid = (low + high) / 2; 10 if(a[mid] == k) 11 return mid; 12

小朋友学数据结构(6):折半查找法

小朋友学数据结构(6):折半查找法 折半查找法又称为二分查找法. (一)基本思想 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表. 重复以上过程,直到找到满足条件的记录,此时查找成功:或直到子表不存在为止,此时查找不成功. 2.png (二)时间复杂度 二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x

C语言数组之冒泡排序+折半查找法(二分查找)

冒泡排序算法 1 int num[5]; 2 int i; 3 //循环接收用户输入的元素 4 for(i=0;i<5;i++){ 5 printf("请输入第%d个元素\n",i+1); 6 scanf("%d",&num[i]); 7 } 8 for(i=0;i<4;i++){ //外层循环,控制排序的轮数 9 int j; 10 for(j=0;j<4-i;j++){ //内层循环,控制冒牌排序每轮的次数 11 if(num[j]&g

输入一组有序数据,使用折半查找法查找一个数据,并输出位置

#include <stdio.h> /** * 使用折半查找,来查找一个数 * * @param arr 数组 * @param len 数组的长度 * @param key 要查找的数 * * @return 要查找的数的位置,如果查找不到返回 -1 */ int searchItem(int arr[], int len, int key) { // 定义变量 int low = 0, high = len - 1, mid; // 循环 while (low <= high) {

数据结构50:二分查找法(折半查找法)

折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高.但是该算法的使用的前提是静态查找表中的数据必须是有序的. 例如,在{5,21,13,19,37,75,56,64,88 ,80,92}这个查找表使用折半查找算法查找数据之前,需要首先对该表中的数据按照所查的关键字进行排序:{5,13,19,21,37,56,64,75,80,88,92}. 在折半查找之前对查找表按照所查的关键字进行排序的意思是:若查找表中存储的数据元素含有多个关键字时,使用哪种关键字做折半查找,就需

算法:折半查找法

输入代码: /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:sum123.cpp * 作 者:林海云 * 完成日期:2015年1月12日 * 版 本 号:v2.0 * * 问题描述:给定一个排序好的数组,使他可以具备查找功能 * 输入描述:要查找的数 * 程序输出:查找数的位置 */ #include<iostream> using namespace std; const int n=10; int main(

有15个数按从大到小的顺序存放在一个数组中, 用折半查找法找出该数是数组的第几个元素的值, 如果该数不在数组中,则输出“无此数”

//2017年7月22日 #include <stdio.h> #define LEN 15 int main(){ int n; void binSearch(int * p,int n); int arr[LEN]={98,97,88,87,76,70,65,54,43,42,39,36,35,31,29}; printf("请输入要查找的数:\n"); scanf("%d",&n); binSearch(arr,n); return 0;