java二分搜索算法怎样实现?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java二分搜索算法怎样实现?相关的知识,希望对你有一定的参考价值。

怎样用下面的代码实现下面(1)和(2)。求大家帮我补充完整。(1)在程序中为数组赋值并写入待搜索元素,输出搜索结果;(2)通过键盘为数组赋值并输入待搜索元素,输出搜索结果;public static int binarySearch(int [] a, int x, int n) int left = 0; int right = n - 1; while (left <= right) int middle = (left + right)/2; if (x = = a[middle]) return middle; if (x > a[middle]) left = middle + 1; else right = middle - 1; return -1;

应该要用递归方法吧? binarySearch()方法应该要带四个参数(数组,要查找的数值,查找范围的最左边下标,查找范围的最右边下标)。然后就利用递归方法在 if (x > a[middle]) 和 else 后面通过修改查找范围自调用binarySearch()方法; 参考技术A 好困难

二分搜索算法

二分搜索用于在已经排序好的集合中搜索值,每次与中间值对比,小于则搜索前半段,大于中间值则在后半段,继续二分搜索,实现代码:

        /// <summary>
        /// 二分查找
        /// </summary>
        /// <param name="arr">已经排序过的数组</param>
        /// <param name="searchkey">搜索值</param>
        /// <returns></returns>
        private static int BinarySearch(int[] arr, int searchkey)
        {
            int start = 0;
            int end = arr.Length - 1;

            int mid = 0;
            while (start <= end)
            {
                mid = (start + end) / 2;
                if (arr[mid] < searchkey) //中间值小于 搜索值,说明要查找值在尾部
                {
                    start = mid + 1;
                }
                else if (arr[mid] > searchkey)//中间值大于搜索值,说明要搜索值在首部
                {
                    end = mid - 1;
                }
                else
                {
                    return mid;
                }
            }
            return -mid;
        }

如果查询不到值返回的是负的最后查询的中间值的位置,负值变正后+1 则可用来有序插入搜索值,使列表保持排序。

 

以上是关于java二分搜索算法怎样实现?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript实现二分查找(搜索)算法(非递归实现)

二分搜索算法

二分搜索算法

常见搜索算法:二分查找

算法——二分搜索树

二分算法(java超详细)