Java 数组 之 一维数组 折半查找 BinarySearch

http://www.verejava.com/?id=16992676834929

/*
用二分法: 从一个已经排好序的数组scores中查找给定的值 value 的索引位置
思路:
    1. 先初始化最低位 low=0, 最高位high=scores.length-1
    2. 求出中间位 mid=(low+high)/2 的值 scores[mid]
    3. 将中间位scores[mid]与value比较
        如果scores[mid]==value 说明找到了打印当前索引mid,
        如果scores[mid]<value 说明要找的value值 在mid+1到 high 之间
        如果scores[mid]>value 说明要找的value值 在low 到 mid-1 之间
    4. 依此类推 循环执行 3的步骤直到找到 value 或者 没有找到 low>=high 终止循环
*/
import java.util.Scanner;
public class ArrayBinarySearch
{
    public static void main(String[] args)
    {
        //定义一个已经排好序的分数数组
        int[] scores={30,40,50,70,85,90,100};
        System.out.println("请输入要查找的值value :");
        Scanner in=new Scanner(System.in);
        int value=in.nextInt();

        //1. 先初始化最低位 low=0, 最高位high=scores.length-1
        int low=0;
        int high=scores.length-1;
        int mid=0;
        boolean isFind=false;
        while(low<high)
        {
            //2. 求出中间位 mid=(low+high)/2 的值 scores[mid]
            mid=(low+high)/2;
            //3. 将中间位scores[mid]与value比较
            //如果scores[mid]==value 说明找到了打印当前索引mid,
            if(scores[mid]==value)
            {
                System.out.println("找到value:"+value+" 在数组的索引位置为:"+mid);
                isFind=true;
                break;
            }
            //如果scores[mid]<value 说明要找的value值 在mid+1到 high 之间
            if(scores[mid]<value)
            {
                low=mid+1;
            }
            //如果scores[mid]>value 说明要找的value值 在low 到 mid-1 之间
            if(scores[mid]>value)
            {
                high=mid-1;
            }
        }
        if(!isFind)
        {
            System.out.println("在数组中没有找到值");
        }

    }
}

http://www.verejava.com/?id=16992676834929

原文地址:https://www.cnblogs.com/verejava/p/9192106.html

时间: 2024-10-04 04:35:21

Java 数组 之 一维数组 折半查找 BinarySearch的相关文章

php多维数组化一维数组

一.使用foreach <?php function arr_foreach ($arr) { static $tmp=array(); if (!is_array ($arr)) { return false; } foreach ($arr as $val ) { if (is_array ($val)) { arr_foreach ($val); } else { $tmp[]=$val; } } return $tmp; } $a = array(1,2=>array(3,4=>

数组(一维数组数组 )

数组:具有相同类型的若干变量按有序的形式组织起来的一种形式.这些按序排列的同类数据元素的集合称为数组. 一维数组定义的时候,需要数据类型.能够存放元素的数量int[] n = new int[5];按照顺序:索引 从0开始(搜索字符总比实际长度少1)n[0] = 3;n[1] = 3;n[2] = 3;n[3] = 3;n[4] = 3;n[5] = 3;错误,索引号超出界限(因为之际为5 ,搜索长度只能到4) 数组就是一个比较整体的概念.把类别区分开,然后引入变量表示顺序.利用冒泡循环来的到结

PHP学习之中数组-遍历一维数组【2】

在PHP学习之中数组[1]中学会怎么创建一个数组,如果PHP学习之中数组[1]中的元素多的话,我们访问元素又是一个问题了,下面我们就使用for语句while,foreach来遍历我们的数组: <?php /* range()原型: * array range ( mixed $start , mixed $limit [, number $step = 1 ] ) * 参数说明: * start 序列的第一个值. limit 序列结束于 limit 的值. step 如果给出了 step 的值,

数组(一维数组、二维数组)

数组概述 C# 数组从零开始建立索引,即数组索引从零开始.C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似.但还有一些差异应引起注意. 这些其实和泛型有些类似,数组的操作没有泛型方便,但是性能却不是泛型所能比拟的 声明数组时,方括号 ([]) 必须跟在类型后面,而不是标识符后面.在 C# 中,将方括号放在标识符后是不合法的语法. int[] table; // not int table[]; 另一细节是,数组的大小不是其类型的一部分,而在 C 语言中它却是数组类型的一部分.这使您可

将二维数组转为一维数组的2种方法

如何将下面的二维数组转为一维数组. 代码如下: $msg = array( array( 'id'=>'45', 'name'=>'jack' ), array( 'id'=>'34', 'name'=>'mary' ), array( 'id'=>'78', 'name'=>'lili' ), ); 第一种方法: 代码如下: foreach($msg as $k => $v){ $ids[] = $id; $names[] = $name; } 第二种方法: 代

implode 多维数组转一维数组并字符串输出

//多维数组返回一维数组,拼接字符串输出 public function r_implode( $glue, $pieces ) { foreach( $pieces as $r_pieces ) { if( is_array( $r_pieces ) ) { $retVal[] = self::r_implode( $glue, $r_pieces ); } else { $retVal[] = $r_pieces; } } return implode( $glue, $retVal );

多维数组变成一维数组

将多维数组变成一维数组: /** * @method 多维数组变成一维数组 * @staticvar array $result_array * @param type $array * @return type */ private function array_multi2array($array) { static $result_array = array(); foreach ($array as $key => $value) { if (is_array($value)) { $t

[C++]二维数组还是一维数组?

记得刚学习C++那会这个问题曾困扰过我,后来慢慢形成了不管什么时候都用一维数组的习惯,再后来知道了在一维数组中提出首列元素地址进行二维调用的办法.可从来没有细想过这个问题,最近自己写了点代码测试下,虽然还是有些不明就里,不过结果挺有意思. 为了避免编译器优化过度,用的是写操作,int,测试分为不同大小的空间,同样大小空间不同的行和列数.分别记录逐行写入,逐列写入,按间隔写入,空间申请和释放的时间. 测试代码 一维数组的申请和释放 1 // Create 2 int *m = new int[n_

C# 数组、一维数组、二维数组、多维数组、锯齿数组

C#  数组.一维数组.二维数组.多维数组.锯齿数组 一.数组: 如果需要使用同一类型的对象,就可以使用数组,数组是一种数据结构,它可以包含同一类型的多个元素.它的长度是固定的,如长度未知的情况下,请使用集合. 二.一维数组: 声明及初始化: class Program { static void Main(string[] args) { //方法一 int[] num = new int[3];//声明一个长度为3的值类型的数组: num[0] = 3;//为数组赋值: num[1] = 5

把简单的二维数组变成一维数组

在工作中我们经常需要把二维数组变成一维数组.那么就需要循环拿出来,其实有时候我们可以使用一些小技巧,借助php的内置函数来实现,但是我说的只是简单的二维数数组$arr= array('name'=>array('a'=>'abc','b'=>'bcd','c'=>'cde'));如果我们使用array_pop(),就可以拿到一维数组了,array_pop()本来是删除并返回数组的最后一个元素. 所以我们就可以将上诉的$arr变成array('a'=>'abc','b'=>