最近正在理解java的一些基础算法的东西

我会经常更新一些自己学习过程中写的东西,建议多dbg观察一下数据每次循环的变化,这样才能加深理解。好好学习!

public class TestMath {
    public static void main(String[] args) {
        int arry[] = {12, 43, 12, 65, 12, 65, 12, 88, 3, 98, 1};
        // System.out.println(binserch(arry,20));
        maopao(arry);
    }


    /**
     * 二分搜索(折半查找)
     * 思想:将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,
     * 如果要找的元素值小 于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。
     * 条件:数组必须有序
     * 优点:查找效率高
     * 缺点:元素必须有序且插入删除困难
     * 适用场景: 折半查找方法适用于不经常变动而查找频繁的有序列表。
     */
    public static int binserch(int[] arr, int key) {
        int left = 0;
        int right = arr.length - 1;
        while (left <= right) {
            int mid = (right + left) / 2;
            if (arr[mid] == key) {
                return mid;
            } else if (arr[mid] < key) {
                left = mid + 1;
            } else if (arr[mid] > key) {
                right = mid - 1;
            }
        }
        return -1;
    }


    /**
     * 冒泡排序
     *
     * @param arr
     * @return
     */

    public static int[] maopao(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length - i - 1; j++) {
                //这里吧参数提出来方便dug观察每次循环的参数变化
                int arrj = arr[j];
                int arrj1 = arr[j + 1];
                //这里为正序排序
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    int s = arr[j];
                    arr[j] = temp;
                }
            }
        }
        //打印出来
        for (int as : arr) {
            System.out.println(as);
        }
        return arr;
    }


}

猜你喜欢

转载自blog.csdn.net/wangzhichaogege/article/details/107929348