zoukankan      html  css  js  c++  java
  • 二分查找算法 (和递归排序算法)

    package cn.itcast.day04.demo04;
    
    import java.nio.charset.MalformedInputException;
    
    /**
     * 插入排序算法   and 二分查找 算法
     * 
     *
     */
    public class DemoInsertionSort {
        /**
         * 插入排序
         * @param arr
         */
        public static void insertion(int[] arr){
            if(arr.length<2||arr==null){
                return;
            }
            for(int i = 1; i < arr.length; i++) {
                for(int j=i-1;j>=0&&arr[j]>arr[j+1];j--){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
    
        public static void main(String[] args) {
            int[] test={6,9,5,3,12};
            insertion(test);
            System.out.println("数组已经排列完成:");
            for (int i = 0; i < test.length; i++) {
                System.out.print(test[i]+"  ");
            }
            //排好序的数组
            int c=choose(test,13,0,test.length-1);
            System.out.println();
            System.out.println("您查找的数据存在::"+c);
        }
    
        /**
         * 二分查找
         * @param arrs  有序数组
         * @param key   目标数值
         * @param L     左边 index
         * @param R     右边 index
         * @return      返回值 查找不到就是 -1 
         */
        public static int choose(int[] arrs,int key,int L,int R){
            while(L<=R){
                int minIndex=(L+R)/2;
                if(arrs[minIndex]<key){
                    L=++minIndex;
                }else if(arrs[minIndex]>key){
                    R=--minIndex;
                }else {
                    return minIndex;  返回目标数值的索引
                }
            }
            return -1;      如果未找到目标数值就返回 -1
        }
    
    }
    /**
    * 二分查找(递归方法)
    * @param arr 有序数组
    * @param key 目标数值
    * @param L 左边索引
    * @param R 右边索引
    * @return 返回值 查找不到返回 -1
    */
    public static int engry(int[] arr,int key,int L,int R){
    if(L<=R){
    int minIndex=(L+R)/2;
    if(arr[minIndex]<key){
    return engry(arr,key,minIndex+1,R);
    }else if(arr[minIndex]>key){
    return engry(arr,key,L,minIndex-1);
    }else if(arr[minIndex]==key){
    return minIndex;
    }
    }
    return -1;
    }
     
  • 相关阅读:
    【SCOI 2011】 糖果
    【POJ 3159】 Candies
    【POJ 1716】 Integer Intervals
    【POJ 2983】 Is the information reliable?
    【POJ 1364】 King
    【POJ 1201】 Intervals
    【POJ 1804】 Brainman
    6月10日省中提高组题解
    【POJ 3352】 Road Construction
    【POJ 1144】 Network
  • 原文地址:https://www.cnblogs.com/axu521/p/10447087.html
Copyright © 2011-2022 走看看