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;
    }
     
  • 相关阅读:
    光照模型
    多线程编程(7)Semaphore信号量
    多线程编程(3)
    Oracle SQL*plus常用的命令和函数
    经典的开发工具
    Windows 7/Vista下通过组策略禁止USB接口
    浅谈.NET下的多线程
    SQLServer和Oracle常用函数对比
    注册表操作类
    利用using和try/finally语句来清理资源
  • 原文地址:https://www.cnblogs.com/axu521/p/10447087.html
Copyright © 2011-2022 走看看