java常用排序算法

353 阅读2分钟

冒泡排序


    //冒泡排序 相邻的数比较,前面的数比后面的大,交换位置,没循环一次得到一个最大的值,并放到数组的末端,
    //最大的数就像泡沫一样冒出来
    @Test
    public void bubbleSort() {
        int[] array = {2, 3, 1, 10, 8, 23, 26, 14, 5};
        if (array.length == 0 || array.length == 1) {
            return;
        }
        //外层循环,循环次数
        for (int i = 0; i < array.length; i++) {
            //内层循环,每循环一次得出一个最大的数,并放置在数组的末端
            for (int j = 0; j < array.length - 1 - i; j++) {
                if (array[j] > array[j + 1]) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(array));
    }

选择排序

    //选择排序 选择第一个为最小值,和后面的比较,找到最小的值,并交换位置。第二轮选择第二个为最小值,和
    //后面的比较,找到最小值,并交换位置。以此类推
    @Test
    public void selectionSort() {
        int[] array = {2, 3, 1, 10, 8, 23, 26, 14, 5};
        for (int i = 0; i < array.length; i++) {
            //默认第一个是最小值
            int min = array[i];
            int index = i;
            for (int j = i + 1; j < array.length; j++) {
                if (min > array[j]) {
                    min = array[j];
                    index = j;
                }
            }
            //第一轮比较完,交换位置,把最小值放在开头
            int temp = array[i];
            array[i] = min;
            array[index] = temp;
        }
        System.out.println(Arrays.toString(array));
    }

快速排序


    @Test
    public void quickSortTest() {
        int[] array = {2, 3, 1, 12, 10, 8, 14, 26, 14, 50, 5};
        quickSort(array, 0, array.length - 1);
        System.out.println(Arrays.toString(array));
    }

    //快速排序 以第一个数为基准,左右各一个指针,右边指针先移动,找到比基准数小的数;
    //左边后移动,找到比基准数大的数;然后交换这两个数,两个指针移动到相同的位置,跳出循环,然后把基准数
    //和指针重合处交换;这样得到基准数左边的,都比基准数小,右边的都比基准数大,然后对左边和右边的递归执行同样的方法。
    private void quickSort(int[] array, int start, int end) {
        //递归条件
        if (start > end) {
            return;
        }
        //以第一个数为基准数
        int base = array[start];
        int i = start;
        int j = end;
        while (i < j) {
            //右边找起,找到比基准数小的数
            //右边的数比基准数大的正确的
            while (array[j] >= base && i < j) {
                j--;
            }
            //左边找起,找到比基准数大的数
            //左边的数比基准数小是正确的
            while (array[i] <= base && i < j) {
                i++;
            }
            //交换两个数
            if (i < j) {
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
        //指针重合,跳出循环 和基准数交换位置
        array[start] = array[i];
        array[i] = base;
        //对基准数两边的数 进行递归操作
        quickSort(array, start, i - 1);
        quickSort(array, i + 1, end);
    }