Java数据结构与算法之二分查找

目录:
1.概述与原理
2.条件
3.实现方法

1.概述与原理
       二分查找有称折半查找,原理就是在按照顺序存储且有序的序列中每次取序列中间值,如果查询内容小于中间值,则取序列前半段继续同样的取值对比操作直到位置起始值大于结束值为止,反之亦然。     

2.条件
       2.1 顺序存储
       2.2 有序

3.实现方法
     实现方法有两种:1.递归调用 2.while循环 ,下面附上两种方法的代码。
   
   
  1. package com.elimy.arithmetic;
  2. import javax.lang.model.element.Element;
  3. public class BinarySearch {
  4. /*
  5. * 无参构造方法
  6. */
  7. public BinarySearch() {
  8. }
  9. public static void main(String[] args) {
  10. int[] array={1,3,5,8,10,15,18};
  11. //int exist = binarySearch(array, 0, array.length - 1, 1);
  12. int exist=binarySearch(array, 16);
  13. System.out.println("是否存在:" + exist);
  14. }
  15. /*
  16. * 二分查找算法实现(采用递归调用)
  17. * @参数:有序的数组,和需要查询的字段,以及开始结束位置
  18. * @返回值:存在返回该值,不存在返回-1
  19. */
  20. public static int binarySearch(int[] orderArray, int start, int end, int searchParam) {
  21. int index=(start+end)>>1;//int index = (start + end) / 2;
  22. if (start <= end) {
  23. // 中间值
  24. int mid = orderArray[index];
  25. System.out.println("mid:" + mid);
  26. if (searchParam == mid) {
  27. return searchParam;
  28. } else if (searchParam < mid) {
  29. System.out.println(searchParam+" <"+ mid);
  30. return binarySearch(orderArray, start, index - 1, searchParam);
  31. } else {
  32. System.out.println(searchParam+" >"+ mid);
  33. return binarySearch(orderArray, index + 1, end, searchParam);
  34. }
  35. } else {
  36. return -1;
  37. }
  38. }
  39. /*
  40. * 二分查找算法实现(采用循环)
  41. * @参数:有序的数组,和查询的值
  42. * @返回值:存在返回该值,不存在返回-1
  43. */
  44. public static int binarySearch(int[] orderArray, int searchParam) {
  45. int start=0;
  46. int end=orderArray.length-1;
  47. int mid_index=0;
  48. while (start<=end) {
  49. mid_index=(start+end)>>1;
  50. if(orderArray[mid_index]==searchParam){
  51. return searchParam;
  52. }else if (searchParam<orderArray[mid_index]) {
  53. end=mid_index-1;
  54. }else {
  55. start=mid_index+1;
  56. }
  57. }
  58. return -1;
  59. }
  60. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值