二分查找算法 (和递归排序算法)

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;
}
 
原文地址:https://www.cnblogs.com/axu521/p/10447087.html