常见的几种排序算法简介

冒泡排序(bubble sort)

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

  1. 比较每一对相邻的两个元素,大的元素放后面,那么比较完一轮后,最后的元素应该是确定的最大的数。
  2. 针对所有的元素重复以上的步骤,除了最后一个数(上一轮确定下来的最大的数),直到没有任何一对数字需要比较,排序完成。

选择排序(selection sort)

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

插入排序(insertion sort)

通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

  1. 从第一个元素开始(该元素可以认为已经被排序),然后取出下一个元素,在已经排序的元素序列中从后向前扫描
  2. 依次比较大小,如果前面一个元素比自己大,就继续向前比较,知道找到比自己小的元素,并排在这个元素后面。
  3. 重复以上步骤,直到最后一个元素比较完,排序完成。

归并排序(merge sort)

通常用递归实现,先把待排序区间[s,t]以中点二分,分成左右区间,接着左右区间继续中点二分,分成更小的左右区间,一层层直到分到单个元素的左右区间,然后一个个小的左右区间比较大小排序并且一层层往上归并,最后把左区间和右区间合并成有序的区间[s,t]。

快速排序(quick sort)

把要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

  1. 从数列中挑出一个元素,称为”基准”(pivot)
  2. 重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区操作。
  3. 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。

####

动手玩一下

算法动态演示