zoukankan      html  css  js  c++  java
  • Java算法入门-二分查找算法

        广州疯狂软件学院拥有三大课程体系包括:java课程,android课程,ios课程,疯狂软件年终钜惠,报名java就业班,免费赠送基础班,名额有限,本月火热报名中,欢迎有志之士电话或者QQ咨询。

      算法前提:

      ==>> 必须采用顺序存储结构

      ==>> 必须按关键字大小有序排列

      算法思路是:

      1.每次去数组中的中间值与被查找的值进行比较

      2.如果中间值小于被查找的值,则选择中间值右边的数组,重复1,直到发现与被查找的值相等的数组元素或返回某个值,表示被查找的值在数组中不存在。

      3.如果中间值大于被查找的值,则选择中间值左边的数组,重复1,直到发现与被查找的值相等的数组元素或返回某个值,表示被查找的值在数组中不存在。

      下面是我个人的代码实现:

      1 /**

      2 *

      3 */

      4 package com.b510.algorithms;

      5

      6 /**

      7 * 二分查找算法是在已经排序好的数组中查找出某个值

      9 * @date 2013-6-7

      10 */

      11 public class PartTwoDichotomy {

      12

      13 public static void main(String[] args) {

      14 int[] a = { 1, 3, 4, 5, 6, 8, 9, 13, 14, 17, 21 };

      15 int x = 21;

      16 int index = dichotomy(a, x);

      17 String result = index == -1 ? "被查询的值[" + x + "]不在数组中!" : "被查询的值[" + x +

      "]在数组中,且下标为:" + index;

      18 System.out.println(result);

      19 }

      20

      21 /**

      22 * 二分法查询算法

      23 *

      24 * @param a

      25 * 已经排序好的数组

      26 * @param x

      27 * 需要查找的值

      28 * @return -1表示x不在数组a中,否则返回数组a的n下标,其中a[n] == x

      29 */

      30 public static int dichotomy(int[] a, int x) {

      31 if (a == null) {

      32 throw new NullPointerException("数组不能为空!");

      33 } else {

      34 int index = 0;

      35 int last = a.length - 1;

      36 int middle = 0;

      37 while (index >= 0 && index <= last) {

      38 print(a, index, last + 1);

      39 middle = (index + last) / 2;

      40 if (a[middle] == x) {

      41 return middle;

      42 }

      43

      44 if (a[middle] < x) {

      45 index = middle + 1;

      46 }

      47

      48 if (a[middle] > x) {

      49 last = middle - 1;

      50 }

      51 }

      52 return -1;

      53 }

      54 }

      55

      56 /**

      57 * 打印数组信息

      58 *

      59 * @param a

      60 * @param index

      61 * 从数组的index地方开始

      62 * @param last

      63 * 到数组last地方结束

      64 */

      65 public static void print(int[] a, int index, int last) {

      66 if (a != null && index >= 0 && index <= last) {

      67 StringBuffer buffer = new StringBuffer();

      68 for (int i = index; i < last; i++) {

      69 buffer.append(a[i] + " ");

      70 }

      71 System.out.println("需要继续进行查找的数组为:" + buffer);

      72 }

      73 }

      74 }

      运行效果:

      需要继续进行查找的数组为:1 3 4 5 6 8 9 13 14 17 21

      需要继续进行查找的数组为:9 13 14 17 21

      需要继续进行查找的数组为:17 21

      需要继续进行查找的数组为:21

      被查询的值[21]在数组中,且下标为:10

      需要继续进行查找的数组为:1 3 4 5 6 8 9 13 14 17 21

      需要继续进行查找的数组为:9 13 14 17 21

      需要继续进行查找的数组为:17 21

      需要继续进行查找的数组为:21

      被查询的值[212]不在数组中!

      需要继续进行查找的数组为:1 3 4 5 6 8 9 13 14 17 21

      需要继续进行查找的数组为:9 13 14 17 21

      需要继续进行查找的数组为:9 13

      需要继续进行查找的数组为:13

      被查询的值[13]在数组中,且下标为:7

      需要继续进行查找的数组为:1 3 4 5 6 8 9 13 14 17 21

      需要继续进行查找的数组为:1 3 4 5 6

      需要继续进行查找的数组为:1 3

      被查询的值[1]在数组中,且下标为:0

      需要继续进行查找的数组为:1 3 4 5 6 8 9 13 14 17 21

      被查询的值[8]在数组中,且下标为:5

      疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。技术知识沉淀深厚的老师,让你感受Java的魅力,激发你对于编程的热爱,让你在半年的时间内掌握8-10万的代码量,掌握Java核心技术,成为真正的技术高手;通过大量全真企业项目疯狂训练,迅速积累项目经验。让你成为技能型的现代化高端人才,迅速获得高薪就业!时间不等人,赶紧联系我们吧!疯狂java培训中心地址:广州天河区车陂沣宏大厦3楼。

      疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。疯狂软件开设了java课程,ios课程,android课程,为你提供一个学习java技能的好机会,疯狂软件特大优惠活动,加疯狂软件微信号(疯狂软件),抢优惠,优惠100元+赠送iOS教材一本 详情请看疯狂java培训官网。IT从业着仍是社会所需要的高端人才,广州疯狂软件之力于培养企业所需要的中高端IT人才,让你成为备受企业青睐的人才。

  • 相关阅读:
    Mysql mysql lost connection to server during query 问题解决方法
    【转】程序员必须知道的几个Git代码托管平台
    FIFO存储器
    JUCE_FIFO实现分析
    【转】HashMap实现原理分析
    【转】int && 非常量右值
    【API】注册表编程基础-RegCreateKeyEx、RegSetValueEx
    【API】文件操作编程基础-CreateFile、WriteFile、SetFilePointer
    【逆向知识】裸函数(Naked函数)
    【逆向知识】堆栈图-汇编中的函数
  • 原文地址:https://www.cnblogs.com/gojava/p/3498984.html
Copyright © 2011-2022 走看看