• Java 实现折半查找


     1 package search;
     2 import java.util.*;
     3 /*折半查找要求线性表是有序的,假设递增
     4  * 基本思路:R[low...high]是当前的查找区间,首先确定中间位置mid=(low+high)/2,将待查关键字k与R[mid]比较,
     5  * 若相等查找成功,若R[mid]>k,则新的查找区间为R[low...mid-1],若R[mid]<k,则新的查找区间为R[mid+1...high],
     6  * 相同的方式处理新的区间,直到区间的长度小于1,查找结束*/
     7 public class zhebansearch {
     8 
     9     public static void main(String[] args){
    10         Scanner cin = new Scanner(System.in);
    11         String[] str=new String[2];
    12         for(int i=0;i<2;i++){
    13             str[i] = cin.nextLine();
    14         }        
    15         String[] st = str[0].split(" ");
    16         int[] c = new int[st.length];
    17         for(int i=0;i<c.length;i++){
    18             c[i]=Integer.parseInt(st[i]);
    19         }
    20         int key = Integer.parseInt(str[1]);
    21         int result = search(c,key);
    22         System.out.print(result+1);//找到返回相应索引值(从1开始),没找到返回1
    23     }
    24     public static int search(int[] R,int k){
    25         int length = R.length;
    26         int mid,low=0,high=length;
    27         while(low<=high){
    28             mid = (low+high)/2;
    29             if(R[mid]==k){
    30                 return mid;
    31             }else if(R[mid]>k){
    32                 high=mid-1;
    33             }else{
    34                 low=mid+1;
    35             }
    36         }
    37         return -1;
    38     }
    39 }

    控制台输入:第一个行输入要查找的序列,第二行输入要查找的关键字。
    例如:
    1 12 33 35 45 67
    33
    结果为:3





  • 相关阅读:
    ETL讲解(很详细!!!)
    必须掌握的30种SQL语句优化
    亿级Web系统搭建——单机到分布式集群
    运行第一个容器
    Docker 架构详解
    容器 What, Why, How
    Docker 组件如何协作?
    部署 DevStack
    通过例子学习 Keystone
    创建 Image
  • 原文地址:https://www.cnblogs.com/Janejxt/p/5832385.html
Copyright © 2020-2023  润新知