博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法学习小结
阅读量:6168 次
发布时间:2019-06-21

本文共 3000 字,大约阅读时间需要 10 分钟。

参考
0. 一些基本概念
--(体会)空间换时间是进一步提高算法速度的最终方法,比如希尔排序和基数排序就是通过占用额外空间来获得比快速排序更快的速度。当然,空间换不换的到时间,也是要看你写的算法的水平的。
--best, worst and average cases. In ,
best,
worst and
average cases of a given express what the usage is
at least,
at most and
on average, respectively. Usually the resource being considered is running time, but it could also be memory or other resources.
   1. example for best case: when doing a search, the first element is the one you look for.
   2. example for worst case: when doing a search, visiting every element to either find it in last position or not find it at all
   3. some algorithms like have very poor worst case behaviours, but a well written hash table of sufficient size will statistically never give the worst case
--Big O notation: In , it is useful in the . If a function
f(
n) can be written as a finite sum of other functions, then the fastest growing one determines the order of
f(
n). For example
f(n) = 9 \log n + 5 (\log n)^3 + 3n^2 + 2n^3 \in O(n^3)\,\!.
Notation Name Example
O(1)\, Determining if a number is even or odd; using a constant-size or
O(\log n)\, Finding an item in a sorted array with a or a balanced search as well as all operations in a .
O(n^c),\;0<c<1 fractional power Searching in a
O(n)\, Finding an item in an unsorted list or a malformed tree (worst case) or in an unsorted array; Adding two n-bit integers by .
O(n\log n)=O(\log n!)\, , loglinear, or quasilinear Performing a ; , (best and average case), or
O(n^2)\, Multiplying two n-digit numbers by a simple algorithm; (worst case or naive implementation), , (worst case), or
O(n^c),\;c>1 or algebraic parsing; maximum for
L_n[\alpha,c],\;0 < \alpha < 1=\,
e^{(c+o(1)) (\ln n)^\alpha (\ln \ln n)^{1-\alpha}}
or Factoring a number using the or
O(c^n),\;c>1 Finding the (exact) solution to the using ; determining if two logical statements are equivalent using
O(n!)\, Solving the traveling salesman problem via brute-force search; generating all unrestricted permutations of a poset; finding the with .
1. 多种分类帮助理解排序基本概念
--内排序和外排序
--就地排序和非就地排序
--General method: insertion, exchange, selection, merging,
etc.. Exchange sorts include bubble sort and quicksort. Selection sorts include shaker sort and heapsort.
2. 排序稳定性。注:不稳定的算法可以稍作修改考虑index来变成稳定的算法
3. 排序算法比较(关键是明白各个算法适用的场合)
n比较小时:选择排序
序列比较有序时:直接插入排序,冒泡排序
n比较大时:快速排序,堆排序,归并排序
(列表如下)

穩定的

  • (bubble sort) — O(n2)
  • (Cocktail sort, 雙向的冒泡排序) — O(n2)
  • (insertion 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(n2)
  • 排序 (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) 額外空間
  • — O(n2)
  • — O(n log n) with high probability, 需要 (1+ε)n 額外空間

不穩定

  • (selection sort)— O(n2)
  • (shell sort)— O(n log n) 如果使用最佳的現在版本
  • — O(n log n)
  • (heapsort)— O(n log n)
  • — O(n log n)
  • (quicksort)— O(n log n) 期望時間, O(n2) 最壞情況; 對於大的、亂數串列一般相信是最快的已知排序
  • — O(n log n)
  • — O(n log n + k) 最坏情況時間,需要 額外的 O(n + k) 空間,也需要找到(longest increasing subsequence)

平均时间复杂度

平均时间复杂度由高到低为:

  • O(n2)
  • O(n2)
  • O(n2)
  • O(n log n)
  • O(n log n)
  • O(n log n)
  • O(n1.25)
  • O(n)

说明:虽然完全逆续的情况下,快速排序会降到选择排序的速度,不过从概率角度来说(参考信息学理论,和概率学),不对算法做编程上优化时,快速排序的平均速度比堆排序要快一些。

转载于:https://www.cnblogs.com/taoxu0903/archive/2011/04/08/2009225.html

你可能感兴趣的文章
木马隐藏地点全搜查
查看>>
来自CES 2018的5G信号:5G手机今年可能还用不上
查看>>
Subversion版本控制
查看>>
奇怪的打印纸盘故障
查看>>
hyperledger v1.0.5 区块链运维入门(一)
查看>>
Mybatis-mapper-xml-基础
查看>>
5. GC 调优(基础篇) - GC参考手册
查看>>
Windows 7 XP 模式颜色质量只有16位的解决
查看>>
SonicWall如何安全模式升级防火墙
查看>>
Linux IPC实践(3) --具名FIFO
查看>>
从Atlas到Microsoft ASP.NET AJAX(6) - Networking, Application Services
查看>>
成长之路---写好一个类
查看>>
读取 java.nio.ByteBuffer 中的字符串(String) 写入方式flash.utils.ByteArray.writeUTF
查看>>
范围管理和范围蔓延
查看>>
android90 bind方式启动服务service调用service里的方法
查看>>
前端开发薪资之各地区对比(图文分析)(share)
查看>>
对做“互联网产品”的一些想法
查看>>
SPI协议及其工作原理浅析【转】
查看>>
原生js编写的安全色拾色器
查看>>
iOS:VFL语言
查看>>