《数据结构与算法之美》笔记 — 排序 (上)

2020-01-09  本文已影响0人  波波维奇c

个人博客首发:https://wubobo952.github.io/post/sorts/

如何分析排序算法
  1. 最好情况,最坏情况,平均情况的时间复杂度:
    分析时,最好要结合需要排序的原始数据,进行三种时间复杂度的情况分析。
  2. 时间复杂度的系数,常数,低阶:
    时间复杂度在数据规模很大的情况下,会忽略系数,常数,低阶。但是在实际的开发中,规模很小的情况下,在对同一阶的排序算法性能比较的时候,就要把系数,常数,低阶考虑进来。
  3. 比较次数和交换(或移动)次数:
    排序算法在排序过程中,会涉及到比较大小和移动或交换元素,所以,如果在分析排序算法执行效率的时候,应该要把移动或交换次数考虑进去。
  4. 排序算法的内存消耗:
    算法的内存消耗,可以通过空间复杂度来衡量,针对排序算法的空间复杂度的一个新概念 — 原地排序 ,是指空间复杂度是 O(1) 的排序算法。
  5. 排序算法的稳定性:
    是指,带排序的序列中如果存在值相等的元素,经过排序后,相等的元素之间的先后顺序不变。

常见的排序算法

冒泡排序:
菜鸟教程图片

冒泡排序是比较相邻的两个元素,如果满足交换条件就进行元素交换,每比较一次,至少让一个元素移动到它应该在的位置,那么移动 n 次就是完成了 n 个数据的排序。

   /**
     * 冒泡排序
     */
    private static int[] sort(int[] n) {
        for (int i = 0; i < n.length; i++) {
            for (int j = 0; j < n.length - i - 1; j++) {
                if (n[j] > n[j + 1]) {
                    int temp = n[j];
                    n[j] = n[j + 1];
                    n[j + 1] = temp;
                }
            }
        }
        return n;
    }
插入排序
菜鸟教程图片
   /**
     * 插入排序:分 已排序部分,非排序部分
     */
    private static int[] insertSort(int[] n) {
        for (int i = 1; i < n.length; i++) {
            int temp = n[i];
            int j = i - 1;
            for (; j >= 0; j--) {
                if (n[j] > temp) {
                    n[j + 1] = n[j];
                } else {
                    break;
                }
            }
            n[j + 1] = temp;
        }
        return n;
    }

选择排序
菜鸟教程图片
  private static int[] selectSort(int[] n) {
        for (int i = 0; i < n.length; i++) {
            int minIndex = i;
            for (int j = i + 1; j <= n.length - 1; j++) {
                if (n[j] < n[minIndex]) {
                    minIndex = j;
                }
            }
            if (i != minIndex) {
                int temp = n[i];
                n[i] = n[minIndex];
                n[minIndex] = temp;
            }
        }
        return n;
    }

虽然 冒泡排序 和 插入排序 时间复杂度是一样的,但是 相同数据规模的情况下,插入排序耗费的时间更短,因为在冒泡排序中赋值的操作有3次,而插入只有1次。

上一篇下一篇

猜你喜欢

热点阅读