常见排序算法目录(持续更新中)

可以参考:https://www.cnblogs.com/onepixel/articles/7674659.html

这里写主要是为了自己总结和加深印象

1、冒泡排序(Bubble Sort)

> 说明

从第一位开始,循环比较相连的两位数,假如前一位数大于后一位数,则交换位置,这样第一遍循环 【数据的长度-1 】次之后,就把最大值放到最后的位置,总共循环 【数据的长度-1】 遍之后,则整个乱序变成正

> 算法复杂度

最优复杂度 最差复杂度 平均复杂度 空间复杂度
O(n) O(n^2) O(n^2) O(1)


 

> 代码实现

public class BubbleSort {
    /**
     * 等待排序的数组(乱序)
     */
    static int[] DISORDER_ARRAY = new int[]{34, 56, 78, 98, 1, 23, 3, 8, 99, 66, 28, 16};
    /**
     * 等待排序的数组(倒序)
     */
    static int[] DESC_ARRAY = new int[]{99, 98, 78, 66, 56, 34, 28, 23, 16, 8, 3, 1};

    /**
     * 入口函数
     *
     * @param args 参数
     */
    public static void main(String[] args) {
//        BubbleSort1();
        BubbleSort2();
    }

    /**
     * 冒泡排序第一种,把最大值移到最后面
     */
    private static void BubbleSort1() {
        // 描述:length 为数据的长度, n 为遍数,k 为每一遍对比次数
        int length = DISORDER_ARRAY.length;
        // 总共循环的遍数(length - 1遍)
        for (int n = 0; n < length - 1; n++) {
            // 每遍对比的次数 length - n - 1
            for (int k = 0; k < length - n - 1; k++) {
                // 升序排序
                if (DISORDER_ARRAY[k] > DISORDER_ARRAY[k + 1]) {
                    int temp = DISORDER_ARRAY[k + 1];
                    DISORDER_ARRAY[k + 1] = DISORDER_ARRAY[k];
                    DISORDER_ARRAY[k] = temp;
                }
            }
            StringBuilder stringBuilder = new StringBuilder();
            for (Integer integer : DISORDER_ARRAY) {
                if (stringBuilder.length() > 0) {
                    stringBuilder.append(", ");
                }
                stringBuilder.append(integer);
            }
            System.out.println(stringBuilder.toString());
        }
    }

    /**
     * 冒泡排序第一种,比较两个值,把最小值交换到对比的值
     */
    private static void BubbleSort2() {
        // 描述:length 为数据的长度, n 为遍数,k 为每一遍对比次数
        int length = DISORDER_ARRAY.length;
        // 总共循环的遍数(length - 1遍)
        for (int n = 0; n < length - 1; n++) {
            // 每遍对比的次数 length - n - 1
            for (int k = n + 1; k < length; k++) {
                // 升序排序
                if (DISORDER_ARRAY[n] > DISORDER_ARRAY[k]) {
                    int temp = DISORDER_ARRAY[k];
                    DISORDER_ARRAY[k] = DISORDER_ARRAY[n];
                    DISORDER_ARRAY[n] = temp;
                }
            }
            StringBuilder stringBuilder = new StringBuilder();
            for (Integer integer : DISORDER_ARRAY) {
                if (stringBuilder.length() > 0) {
                    stringBuilder.append(", ");
                }
                stringBuilder.append(integer);
            }
            System.out.println(stringBuilder.toString());
        }
    }
}

2、选择排序(Selection Sort)

> 说明

从第一位开始,用其后面的数值和其比较,若是比它小则记录下索引位置,然后后面的比较用当前索引位置的值和后面的值比较,直到比较结束找到最小的值,然后和起始用于比较位置的值进行交换位置。然后从第2、3、4、.....位开始,重复上面的操作,直到结束。

> 复杂度

最优复杂度 最差复杂度 平均复杂度 空间复杂度
O(n) O(n^2) O(n^2) O(1)

> 代码实现

public class SelectionSort {
    /**
     * 等待排序的数组(乱序)
     */
    static int[] DISORDER_ARRAY = new int[]{34, 56, 78, 98, 1, 23, 3, 8, 99, 66, 28, 16};
    /**
     * 等待排序的数组(倒序)
     */
    static int[] DESC_ARRAY = new int[]{99, 98, 78, 66, 56, 34, 28, 23, 16, 8, 3, 1};

    /**
     * 入口函数
     *
     * @param args 参数
     */
    public static void main(String[] args) {
        // 逻辑:从第一位开始,分别用后面的数据和当前的值进行比较,记录最小的值,然后把当前的值和最小值进行交换
        // 循环 长度-1 遍
        int length = DISORDER_ARRAY.length;
        for (int i = 0; i < length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < length; j++) {
                // 用最小值和之前的值比较
                if (DISORDER_ARRAY[minIndex] > DISORDER_ARRAY[j]) {
                    minIndex = j;
                }
            }
            if (i != minIndex) {
                int temp = DISORDER_ARRAY[minIndex];
                DISORDER_ARRAY[minIndex] = DISORDER_ARRAY[i];
                DISORDER_ARRAY[i] = temp;
            }
            StringBuilder stringBuilder = new StringBuilder();
            for (Integer integer : DISORDER_ARRAY) {
                if (stringBuilder.length() > 0) {
                    stringBuilder.append(", ");
                }
                stringBuilder.append(integer);
            }
            System.out.println(stringBuilder.toString());
        }
    }
}

3、插入排序(Insertion Sort)

> 说明

 

> 复杂度

> 代码实现

4、希尔排序(Shell Sort)

5、归并排序(Merge Sort)

6、快速排序(Quick Sort)

7、堆排序(Heap Sort)

8、计数排序(Counting Sort)

9、桶排序(Bucket Sort)

10、基数排序(Radix Sort)

猜你喜欢

转载自blog.csdn.net/qq_38428623/article/details/87631205
今日推荐