java的二分插入法_JAVA 二分查找法

[java]代码库import java.util.*;

2 /**

3 *

4 * 一个二分查找法

5 * @author nileader

6 */

7 public class BinaryQuery {

8 /**

9 *   *折半查找法,又称十分法查找 查找的对象是一个按序排好的数组

10 */

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

12 int[] initVals = { 9,12, 37, 53, 67, 71, 89, 122, 290, 435, 555, 888, 1104, 1111, 2222,3333,21343,43256,56778300 };

13 for(int i = 0; i < initVals.length; i++)

14 {

15 System.out.print(initVals[i] + "、");

16 }

17 Scanner cin = new Scanner(System.in);

18 while(cin.hasNext())

19 {

20 int targetVal = cin.nextInt();

21 BinaryQuery bq = new BinaryQuery();

22 int postion = bq.query(initVals,targetVal);

23 if(postion == -1) System.out.println("没有找到");

24 else System.out.println("要查找的数字在数组中的第 " + (postion + 1) + "个位置");

25 }

26 }

27

28 /*

29 * @param values 要找的数组对象

30 * @param targetVal 要找的目标数字

31 * @return -1 没有找到,返回-1

32 */

33 public int query(int[] initVals, int targetVal) {

34 int lowBound = 0;

35 int upBound = initVals.length - 1;

36

37 //相当于一个指针,指向下一个要比的数字

38 int nowPostion;

39

40 while (true) {

41

42 //指向现在所有数字的中间,没有整除时向下取整,如7/2=3

43 nowPostion = (lowBound + upBound) / 2;

44 //如果现在这个数字就是了,返回现在的编号

45 if (initVals[nowPostion] == targetVal) {

46 return nowPostion;

47 }

48 //如果上界小于下界时,说明已经找完全部了,返回-1表示没有找到

49 else if (lowBound > upBound) {

50 return -1;

51 }

52 //还可以继续找

53 else {

54 //当前指针的数比targetVal要小,那么要往小的方向继续找

55 if (initVals[nowPostion] < targetVal) {

56 lowBound = nowPostion + 1;

57 }

58 //当前指针的数比targetVal要大,那么要往大的方向继续找

59 else {

60 upBound = nowPostion - 1;

61 }

62 }

63 }

64

65 }

66 } //源代码片段来自云代码http://yuncode.net

694748ed64b9390909c0d88230893790.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值