美文网首页
算法与数据结构-排序(3)

算法与数据结构-排序(3)

作者: 心无所恃_周义 | 来源:发表于2020-03-11 15:12 被阅读0次

常见排序算法

算法 平均时间复杂度 原地排序 稳定排序
插入排序 O(n^2) ,有序情况 -> O(n) True True
快速排序 O(nlogn),有序情况 -> O(n^2) True False
归并排序 O(nlogn) False True
堆排序 O(nlogn) True False

稳定性

  1. 对于相等的元素,在排序后,原来靠前的元素依然靠前。
  2. 相等的元素位置没有改变。
  3. 通过自定义比较器,解决排序算法的稳定性问题。

快速排序

排序算法是最好的排序算法之一,在很多库函数中选择使用快速排序来作为实现方式,如java中的sort()。

  1. 工作方式
    1.1. 从数组中取出一个元素作为“基准值”。
    1.2. 将其他元素分为“大于”基准值的元素和“小于”基准值的元素。
    1.3. 递归对这两个组做排序。
  2. 最好情况下的复杂度: O(nlogn)。
  3. 最坏情况下的复杂度:如果元素接近有序,算法的复杂度接近于 O(n^2)。

快速排序简单实现

java方式实现

    public static void sort(Object[] v, int left, int right, Comparator comparator) {
        int i, last;
        if (left >= right)
            return;
        // move pivot item
        swap(v, left, rand(left, right));
        last = left;
        // partition
        for (i = left + 1; i <= right; i++) {
            if (comparator.compare(v[i], v[left]) < 0) {
                swap(v, ++last, i);
            }
        }
        // restore pivot item
        swap(v, left, last);
        // sort each part
        sort(v, left, last - 1, comparator);
        sort(v, last + 1, right, comparator);
    }

    static void swap(Object[] v, int i, int j) {
        Object temp = v[i];
        v[i] = v[j];
        v[j] = temp;
    }

    static Random random = new Random();
    static int rand(int left, int right) {
        return left + Math.abs(random.nextInt()) % (right - left + 1);
    }

相关文章

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • (转)排序算法

    排序算法点这里 数据结构与算法——计数排序、桶排序、基数排序

  • 算法与数据结构(六):堆排序

    title: 算法与数据结构(六):堆排序tags: [算法与数据结构, C语言, 堆排序]date: 2019-...

  • Hash算法

    数据结构与算法分析:大纲数据结构:数组算法:hash算法算法:排序算法Java实现 1 Hash算法? 将任意长度...

  • 数据结构与算法 - 排序与搜索

    文章来源:数据结构与算法(Python) 排序与搜索排序算法(英语:Sorting algorithm)是一种能将...

  • python 简单排序

    数据结构与算法 01 我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。 排序算法大体可分...

  • 10分钟看懂10大经典算法(Swift代码实现)

    排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进...

  • 排序算法

    排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序。 内部排序是数据记录在内存中...

  • Python实现十大经典排序算法

    排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进...

  • 美团149道面试题,全会拿40Koffer没问题

    一、数据结构与算法基础 1· 说一下几种常见的排序算法和分别的复杂度。 2· 用Java写一个冒泡排序算法 3· ...

网友评论

      本文标题:算法与数据结构-排序(3)

      本文链接:https://www.haomeiwen.com/subject/uqbfjhtx.html