栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

二分查找算法/折半查找算法(用Java实现)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二分查找算法/折半查找算法(用Java实现)

 

package Exer;


public class BinarySeek {
    public static void swap(int []arr,int i,int j)
    {
        int tamp = arr[i];
        arr[i] = arr[j];
        arr[j] = tamp;
    }
    //这里我们用快速排序来排序,快速排序的相关说明已经在之前的文章中有说明
    public static void Sort(int []arr,int start,int end)
    {
        if(start < end)
        {
            int temp = arr[start];
            int low = start;
            int high = end + 1;
            while(true)
            {
                while(low < end && arr[++low] <= temp)
                    ;
                while(high > start && arr[--high] >= temp)
                    ;
                if(high > low)
                {
                    swap(arr,high,low);
                }
                else {
                    break;
                }
            }
            swap(arr,start,high);
            //调用递归,进行排序
            Sort(arr,start, high-1);
            Sort(arr,high+1,end);
        }
    }

    public static void Binary(int []arr,int start,int end)
    {
        int target = 100;//设置要查找的目标元素
        int index =-1;//将目标元素的下表先赋值为-1
        int counter = 0;//用作记循环的次数
        while(start <= end)
        {//进入循环,进行查找
            counter++;
            int mid = (start + end) /2 ;
            if(arr[mid]==target)
            {//如果找到,就将下标赋值给index,然后跳出循环
                index = mid;
                break;
            }
            else if(arr[mid] < target)
            {//如果中间元素小于目标元素,则缩小范围继续查找
                start = mid +1;
            }
            else if (arr[mid] >target)
            {//如果中间元素大于目标元素,则继续缩小范围进行查找
                end = mid -1;
            }
        }//当跳出循环时会出现两种情况,要么找到目标元素,跳出循环,要么找不到,循环结束。
        //因为index起始赋值为-1,所以当index不等于-1时,则说明找到指定元素
        if(index != -1)
        {
            System.out.println("二分查找的目标元素是: " + target + "t" + "所在的索引位置是:" + index);
            System.out.println("查找次数是:" + counter);
        }//反之,index的值没变,还是-1,没找到
        else{
            System.out.println("没找到目标元素:" + target);
            System.out.println("查找次数是:" + counter);
        }
    }

    public static void main(String[] args) {
        //提前排好序
        int []arr = {12,12,3,-23,45,6,5,6,56,5,-545,45,53,-98,42,-6765,-68,0,5676};
        System.out.println("排序前:" + java.util.Arrays.toString(arr));
        Sort(arr,0,arr.length-1);
        System.out.println("排序后:" + java.util.Arrays.toString(arr));
        System.out.println("————进入二分法查找————");
        Binary(arr,0,arr.length-1);
    }
}

以上的排序方法是快速排序,快速排序的详解在之前的文章中有说明(点击下面连接即可)

http://t.csdn.cn/s4btdhttp://t.csdn.cn/s4btd运行结果:

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/820180.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号