Rumah > Java > javaTutorial > Java 编程下的二分法查找

Java 编程下的二分法查找

高洛峰
Lepaskan: 2016-12-19 16:16:02
asal
1082 orang telah melayarinya

算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是有序不重复的。 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功;若 x 小于当前位置值,则在数列的前半段中查找;若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止。

假设有一个数组 { 12, 23, 34, 45, 56, 67, 77, 89, 90 },现要求采用二分法找出指定的数值并将其在数组的索引返回,如果没有找到则返回 -1。代码如下:

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

package cn.sunzn.dichotomy;

 

public class DichotomySearch {

   public static void main(String[] args) {

       int[] arr = new int[] { 12, 23, 34, 45, 56, 67, 77, 89, 90 };

       System.out.println(search(arr, 12));

       System.out.println(search(arr, 45));

       System.out.println(search(arr, 67));

       System.out.println(search(arr, 89));

       System.out.println(search(arr, 99));

   }

 

   public static int search(int[] arr, int key) {

       int start = 0;

       int end = arr.length - 1;

       while (start <= end) {

           int middle = (start + end) / 2;

           if (key < arr[middle]) {

               end = middle - 1;

           } else if (key > arr[middle]) {

               start = middle + 1;

           } else {

               return middle;

           }

       }

       return -1;

   }

}

Salin selepas log masuk



更多Java 编程下的二分法查找相关文章请关注PHP中文网!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan