数组里的算法 2020-07-11 | | | 数组算法:二分法 话不多说,请看代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950package com.array;/** * @Author: liuchang * @CreateTime: 2020.7.11 * @Description: 郑州工程技术学院-中德学院 *//*二分查找:1.二分查找的前提是:数组的元素必须有序 2.二分查找的思想是:每一次都查找中间的元素,比较大小就能减少一半的元素 3.二分法原理解析: 创建定义最小索引minIndex,最大索引maxIndex,中间索引centerIndex。 如果所查询数值的索引等于中间索引,那就返回中间索引 如果所查询数值的索引大于中间索引,那就把minIndex+1赋值给centerIndex.(这里为什么要把minIndex加1呢?原来的中间索引已经被查过,所以让minIndex再加一个1,查中间索引的前一位) 如果所查询数值的索引小于中间索引,那就把maxIndex-1赋值给centerIndex.(这里为什么要把maxIndex减1呢?原来的中间索引已经查过,所以让maxIndex再减一位,查中间索引的后一位) 进行循环:当minIndex<=maxIndex时循环,即可。 这里为什么要minIndex<=maxIndex作为循环条件呢? 当minIndex=maxIndex时就是只有一个值了,这个值要么是要查找的,要么不是。 当minIndex>maxIndex时就不再循环了。 如果查询不到就返回-1. */public class ArrayDemo02 { public static void main(String[] args) { long l = System.currentTimeMillis(); int[] array={10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220}; int indexByDicco = getIndexByDicco(array, 160); System.out.println("所查询的元素索引为:"+indexByDicco); long l1 = System.currentTimeMillis(); System.out.println("查询所用时间为:"+(l1-l)+"ms"); } private static int getIndexByDicco(int[] array, int Num) { //定义最小索引minIndex,最大索引maxIndex,中间索引centerIndex int minIndex=0; int maxIndex=array.length-1; int centerIndex=(maxIndex+minIndex)/2; while(minIndex<=maxIndex){ if (Num==array[centerIndex]){ return centerIndex; } else if (Num>array[centerIndex]){ minIndex=centerIndex+1; } else if (Num<array[centerIndex]){ maxIndex=centerIndex-1; } centerIndex=(maxIndex+minIndex)/2; } return -1; }} 相关文章 点击查看 数组里的算法 数组里的算法 数组里的算法 -------------------本文结束 感谢您的阅读------------------- 坚持原创技术分享,感谢您的支持和鼓励! Donate WeChat Pay Alipay Post author: Student-Chang Post link: https://studentliuchang.gitee.io/%E6%95%B0%E7%BB%84%E9%87%8C%E7%9A%84%E7%AE%97%E6%B3%95%EF%BC%9A%E4%BA%8C%E5%88%86%E6%B3%95%E6%9F%A5%E8%AF%A2/ Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.