冒泡排序 二分查找法(JAVA)算法

1.二分查找又称折半查找,它是一种效率较高的查找方法。

2.二分查找要求:(1)必须采用顺序存储结构 (2).必须按关键字大小有序排列

3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后;将要查找的值和数组的中值进行比较,若小于中值则在中值前 面找,若大于中值则在中值后面找,等于中值时直接返回。然后依次是一个递归过程,将前半部分或者后半部分继续分解为三部分。

4.实现:二分查找的实现用递归和循环两种方式

package javaTest;
/**
 * 二分查找法

首先将无序数组排序成按照小到大排序
 * @author JackChen
 *
 */
public class MaoPaoAndErFen {
    public static void main(String[] args) {
        int[] arrs = {2,8,6,3,9,12,24,10,5,60,40,38,99,26};
        //冒泡排序方法按照从小到大 如果从大到小就将arrs[j]<arrs[j+1]
        for (int i = 0; i < arrs.length-1; i++) {
            for (int j = 0; j < arrs.length-1; j++) {
                if(arrs[j]>arrs[j+1]){//如果前一个大于后面的 就替换下位置
                    int num = arrs[j+1];
                    arrs[j+1] = arrs[j];
                    arrs[j] = num;
                }
            }
        }
        for (int i : arrs) {
            System.out.println(i);
        }
        System.out.println(erFenWhile(arrs, 24));  //循环二分查找
        System.out.println(erFenDiGui(arrs, 24, 0, arrs.length-1));//循环二分查找发递归方法
    }
    /**
     * 循环二分查找发
     * @param arrs
     * @param value
     * @return
     */
    public static int erFenWhile(int[] arrs,int value){
        int min = 0;
        int max = arrs.length-1;
        while(min<=max){
            int middle = (min+max)/2;
            if(arrs[middle]>value){//如果数组循环>查找值 最大值 = 中间值-1
                max = middle - 1;
            }else if(arrs[middle]<value){//如果集合<查找值 最大值 = 中间值+1
                min = middle+1;
            }else{
                return middle;
            }
        }
        return -1;
    }
    /**
     * 递归二分查找法
     * @param arr
     * @param value
     * @param min
     * @param max
     * @return
     */
    public static int erFenDiGui(int[] arr,int value,int min,int max){
        if(min>max || arr[max]<value || arr[min]>value){
            return -1;
        }
        int middle = (min+max)/2;
        if(arr[middle]>value){//数组中间值>查找值 返回下次方法  最大值 = 中间-1
            return erFenDiGui(arr, value, min, middle-1);
        }else if(arr[middle]<value){//数组中间值<查找值 返回下次方法 最小值= 中间+1
            return erFenDiGui(arr, value, middle+1, max);
        }else{
            return middle;
        }
    }
}
冒泡排序 二分查找法(JAVA)算法执行完输出两个8是数组的下标