数组里的算法

数组算法:二分法

话不多说,请看代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package 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;
}
}
点击查看
-------------------本文结束 感谢您的阅读-------------------