5 Sep 2016 本文阅读量

7种经典排序算法视觉直观呈现

快速排序

介绍

快速排序是东尼·霍尔发展的一种排序算法。平均状况下,排序N个项目要O(nlog2n)次比较,最坏状况下需要O(n2)次比较,这种状况并不常见。事实上,快速排序通常明显比其他O(n2)算法更快,因为它的内部循环可以在大部分架构上很有效率的实现出来。

步骤

  1. 从数列中挑出一个元素,成为基准
  2. 重新排序数列,所有元素比基准小的摆放在基准前面,所有比基准大的摆在基准后面(和基准相同的元素可以摆到任意一边)。在这个分区操作结束之后,该基准就处于数列中间。
  3. 递归地把小鱼基准值元素和大于基准值元素的子数列进行分区操作。

alt text

归并排序

介绍

归并排序采用分治法进行排序。

alt text

堆排序

介绍

堆排序利用堆这种数据结构所设计的排序算法。堆是近似完全二叉树的结构,并同时满足堆的性质:子节点的键值或索引总是小于(或大于)它的父节点.

alt text

选择排序

介绍

选择排序是简单直观的排序算法。

步骤

  1. 在未排序序列中找到最小元素,存放到排序序列的起始位置.
  2. 从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾.
  3. 以此类推,直到所有元素均排序完毕.

alt text

冒泡排序

介绍

冒泡排序是简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到不再交换,也就是说该数列已经排序完成。

步骤

  1. 比较相邻元素,如果第一个比第二个大,就交换。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。
  3. 针对所有的元素重复以上的步骤,除最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

alt text

插入排序

介绍

插入排序是简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

步骤

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置中
  6. 重复步骤2

希尔排序

介绍

希尔排序是插入排序的一种高速而稳定的改进版本。

步骤

希尔排序是基于插入排序的以下两点性质提出改进方法的:

  1. 插入排序在对几乎已经排好序的数据操作时效率高, 即可以达到线性排序的效率
  2. 插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位

alt text


Tags:
Status:

Share:

Comments: