Algorithm

Algorithm

排序列表

稳定的排序

  • 冒泡排序(bubble sort)— O(n2)

  • 插入排序(insertion sort)—O(n2)

  • 鸡尾酒排序(cocktail sort)—O(n2)

  • 桶排序(bucket sort)—O(n);需要O(k)额外空间

  • 计数排序(counting sort)—O(n+k);需要O(n+k)额外空间

  • 归并排序(merge sort)—O(n log n);需要O(n)额外空间

  • 原地归并排序— O(n log2 n)如果使用最佳的现在版本

  • 二叉排序树排序(binary tree sort)— O(n log n)期望时间;O(n2)最坏时间;需要O(n)额外空间

  • 鸽巢排序(pigeonhole sort)—O(n+k);需要O(k)额外空间

  • 基数排序(radix sort)—O(n·k);需要O(n)额外空间

  • 侏儒排序(gnome sort)— O(n2)

  • 图书馆排序(library sort)— O(n log n)期望时间;O(n2)最坏时间;需要(1+ε)n额外空间

  • 块排序(block sort)— O(n log n)

不稳定的排序

  • 选择排序(selection sort)—O(n2)

  • 希尔排序(shell sort)—O(n log2 n)如果使用最佳的现在版本

  • Clover排序算法(Clover sort)—O(n)期望时间,O(n2)最坏情况

  • 梳排序— O(n log n)

  • 堆排序(heap sort)—O(n log n)

  • 平滑排序(smooth sort)— O(n log n)

  • 快速排序(quick sort)—O(n log n)期望时间,O(n2)最坏情况;对于大的、随机数列表一般相信是最快的已知排序

  • 内省排序(introsort)—O(n log n)

  • 耐心排序(patience sort)—O(n log n + k)最坏情况时间,需要额外的O(n + k)空间,也需要找到最长的递增子序列(longest increasing subsequence)

不实用的排序

Bogo排序— O(n × n!),最坏的情况下期望时间为无穷。 Stupid排序—O(n3);递归版本需要O(n2)额外内存 珠排序(bead sort)— O(n) or O(√n),但需要特别的硬件 煎饼排序—O(n),但需要特别的硬件 臭皮匠排序(stooge sort)算法简单,但需要约n^2.7的时间

各种算法的时间复杂度

排序分类

相关资料

Last updated