简单排序算法总结

导读:本篇文章讲解 简单排序算法总结,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

概述

选择排序

特点:强调选择,周期性的选择出最小或最大的数。
算法复杂度:O(N^2)

    private static void swap(int[] arr, int i, int minIndex) {
        int temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
    private static void selectSortArr(int[] arr) {
	   if (Objects.isNull(arr) || arr.length < 2) {
	       return;
	   }
    /**
     * 1. 从i-n个位置选择出最小的数的位置
     * 2. 交换i和最小数位置的数
     */
    for (int i = 0; i < arr.length; i++) {
        int minIndex = i;
        for (int j = i + 1; j < arr.length; j++) {
            minIndex = arr[j] < arr[minIndex] ? j : minIndex;
        }
        swap(arr, i, minIndex);
    }
}

冒泡排序

特点:强调相邻数据比较,周期性的两两比较。
算法复杂度:O(N^2)

    private static void bubbleSort(int[] arr) {
        if (Objects.isNull(arr) || arr.length < 2) {
            return;
        }
        /**
         * 0 ~ n-1上相邻两个数比较,大的往后
         */
        int n = arr.length;
        for (int i = n - 1; i >= 0; i--) {
            for (int j = 0; j < i; j++) {
                if (arr[j] > arr[j + 1]) {
                    swap(arr, j, j + 1);
                }
            }
        }
    }

插入排序

特点:强调把无序的数插入有效的数中,周期性的把无序的数插入有序的数中。
算法复杂度:O(N^2)

    private static void insertSort1(int[] arr) {
        if (Objects.isNull(arr) || arr.length < 2) {
            return;
        }
        // 0-n, 保证插入之前的有序,插入后也有序
        int n = arr.length;
        for (int i = 1; i < n; i++) {
            // 保证0-j有序,从右往左比较
            for (int pre = i - 1; pre >= 0 && arr[pre] > arr[pre + 1]; pre--) {
                swap(arr, pre, pre + 1);
            }
        }
    }

为何算法复杂度是O(N^2)呢,实际上如果是一个已经排好序的数组,复杂度只有O(N),但是如果数组正好是倒叙的则是O(N ^2)。
如果某个算法流程的复杂程度会根据数据状况不同而不同,那么你必须安装最差情况来估计。
很明显,在最差情况下,如果arr长度为N,插入排序的每一步常数操作的数量,还是如等差数列一般,所以,总的常量操作数量= a*(N^2) + b*N+c。
所以插入排查的时间复杂度是O(N^2)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99954.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!