zoukankan      html  css  js  c++  java
  • 二分法(折半查找法)小demo

    使用此算法,必须有一个前提,那就是数组必须是有序的。
    package com.ly.tcwireless.international.test;
    
    import org.junit.Test;
    
    public class ErFerFaTest extends BaseTest{
        @Test
        public void myTest(){
            int[] arr = {10, 12, 15, 17, 19, 20, 22, 23, 24, 25, 30, 31, 32, 33, 34, 35, 40, 41, 42, 43, 44, 45, 46};
            int target = 32;
            
            int index = halfSearch(arr, target);
            System.out.println(index);
        }
        
        /**
         * 二分法
         * @param arr
         * @param target
         * @return
         */
        private int halfSearch(int[] arr, int target){
            int min = 0;//数组最小索引
            int max = arr.length - 1;//数组最大索引
            int mid = (min + max) / 2;//数组中间索引
            
            int i = 0;
            while(true){
                System.out.println("第" + ++i + "次,min:" + min + ";mid:" + mid + ";max:" + max);
                //跟中间值进行比较
                if (target > arr[mid]) {
                    min = mid + 1;
                }
                else if (target < arr[mid]) {
                    max = mid - 1;
                }
                else if(target == arr[mid]){
                    return mid;
                }
                //重新取中间索引
                mid = (min + max) / 2;
                //如果最小索引大于最大索引说明有问题,直接返回
                if (min > max) {
                    return -1;
                }
            }
        }
    }
  • 相关阅读:
    常用html设置:
    Java Enum
    ajax
    Utils使用
    jdk免安装对应配置
    jdk mvn下载--操作系统
    SpringMvc 文件上传后台处理
    SpringMvc 获取ApplicationContext
    Jenkins 持续集成
    自定义 directive pagination
  • 原文地址:https://www.cnblogs.com/subendong/p/9565461.html
Copyright © 2011-2022 走看看