排序及其汇总
1)、冒泡:O(N^2) 最好:O(N) 空间复杂度:O(1) 稳定
在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。
最好情况是因为队列有序。
(2)、选择:O(N^2) 空间复杂度:O(1) 不稳定
每趟从待排序的记录序列中选择关键字最小的记录放置到已排序表的最前位置,直到全部排完。
序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。
(3)、直接插入:O(N^2) 最好:O(N) 空间复杂度:O(1) 稳定
每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的子序列的合适位置,直到全部插入排序完为止。
最好情况是因为队列有序。
(4)、归并排序:O(nlogn) 空间复杂度:O(N) 稳定
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
空间复杂度是因为需要一个辅助数组,可以定义为全局变量。
(5)、快速排序:O(nlogn) 最坏:O(N^2) 空间复杂度:O(logn) 不稳定
先从数列中取出一个数作为基准数