zoukankan      html  css  js  c++  java
  • 排序

    排序

    基本概念

    稳定性:稳定性是指两个相同的值,排序前后的顺序保持不变,即该排序算法是稳定的

    衡量标准:时间复杂度、空间复杂度

    内部排序

    插入排序:直接插入排序、折半插入排序、希尔排序

    交换排序:冒泡排序、快速排序

    选择排序:简单选择排序、堆排序

    归并排序

    基数排序

    外部排序

    多路归并排序

    注:基于比较的排序,至少进行比较次数为 log2(n!)  【向上取整】

    一趟排序能确定一个元素最终位置的排序算法有:简单选择排序、快速排序、堆排序、冒泡排序

    趟次数与初始状态无关的排序算法:插入排序、选择排序、基数排序

    简单选择排序的关键字比较次数与待排序元素序列的初始排列无关

    算法 最好情况 平均情况 最坏情况 空间复杂度 是否稳定
    直接插入排序 O(n)

    O(n^2)

    O(n^2) O(1)
    冒泡排序 O(n) O(n^2) O(n^2) O(1)
    简单选择排序 O(n^2) O(n^2) O(n^2) O(1)
    希尔排序       O(1)
    快速排序 O(nlog2(n)) O(nlog2(n)) O(n^2) O(log2(n))
    堆排序 O(nlog2(n)) O(nlog2(n)) O(nlog2(n)) O(1)
    2-路归并排序 O(nlog2(n)) O(nlog2(n)) O(nlog2(n)) O(n)
    基数排序 O(d(n+r)) O(d(n+r)) O(d(n+r)) O(r)

    附:

    既然有排序算法,是否有乱序算法

    PHP:

    <?php
    $arr = [];
    for($i = 0; $i < 100; $i++) {
        $arr[$i] = $i+1;
    }
    for($i = 0; $i < 100; $i++) {
        $rand = rand(0,99);
        $temp = $arr[$i];
        $arr[$i] = $arr[$rand];
        $arr[$rand] = $temp;
    }
  • 相关阅读:
    Codeforces 787D. Legacy 线段树优化建图+最短路
    Codeforces 1051E. Vasya and Big Integers
    BZOJ3261 最大异或和
    BZOJ3531 SDOI2014 旅行
    洛谷P2468 SDOI 2010 粟粟的书架
    2018 ICPC 焦作网络赛 E.Jiu Yuan Wants to Eat
    HDU6280 From Tree to Graph
    HDU5985 Lucky Coins 概率dp
    (HDU)1334 -- Perfect Cubes (完美立方)
    (HDU)1330 -- Deck (覆盖物)
  • 原文地址:https://www.cnblogs.com/lyc94620/p/12545737.html
Copyright © 2011-2022 走看看