参考:http://wuchong.me/blog/2014/02/09/algorithm-sort-summary/
1.常见排序算法如下:
这里的稳定性,是指数组里的相同元素是否保持相对位置不变,一般不稳定的话,是指元素交换位置,存在跳跃性。
2.算法代码加描述
(1)冒泡排序
【注意:】上述冒泡还可以优化,对于已经有序的,可以加一个判断,如果不存在相邻元素交换,则说明有序,复杂度为O(n);
(2)选择排序
(3)插入排序:插入排序的工作原理是,对于每个未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
//直接插入排序:待续
//二分插入排序:待续
(4)希尔排序,也称递减增量排序算法,实质是分组插入排序
//shell排序:待续
(5)快速排序:快速排序通常明显比同为Ο(nlogn的其他算法更快,因此常被采用,而且快排采用了分治法的思想,所以在很多笔试面试中能经常看到快排的影子。可见掌握快排的重要性;
(6):归并排序:归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。
(7)二叉堆排序,这里是大根堆:堆排序在top K问题中使用比较频繁。
堆排序是采用二叉堆的数据结构来实现的,虽然实质上还是一维数组。二叉堆是一个近似完全二叉树。二叉堆具有以下性质:
父节点的键值总是大于或等于(小于或等于)任何一个子节点的键值;
每个节点的左右子树都是一个二叉堆(都是最大堆或最小堆);