[关闭]
@zhutoulwz 2015-10-08T06:52:08.000000Z 字数 3987 阅读 2397

各种排序算法总结

排序算法 数据结构


排序算法是最基本最常用的算法,不同的排序算法在不同的场景或应用中会有不同的表现,我们需要对各种排序算法熟练才能将它们应用到实际当中,才能更好地发挥它们的优势。今天,来总结下各种排序算法。

下面这个表格总结了各种排序算法的复杂度与稳定性:

排序算法 平均时间复杂度 最坏复杂度 空间复杂度 稳定性
冒泡排序 O(n2) O(n2) O(1) 稳定
选择排序 O(n2) O(n2) O(1) 不稳定
直接插入排序 O(n2) O(n2) O(1) 稳定
快速排序 O(nlogn) O(n2) O(logn) 不稳定
归并排序 O(nlogn) O(nlogn) O(1) 稳定
堆排序 O(nlogn) O(nlogn) O(1) 不稳定
希尔排序 O(nlogn) O(ns) 1 O(1) 不稳定
基数排序 O(logRB) O(logRB) O(n) 稳定
二叉树排序 O(nlogn) O(nlogn) O(n) 稳定
计数排序 O(n+k) O(n+k) O(n+k) 稳定

冒泡排序

冒泡排序可谓是最经典的排序算法了,它是基于比较的排序算法,时间复杂度为O(n^2),其优点是实现简单,n较小时性能较好。

选择排序

插入排序

快速排序

归并排序

堆排序

二叉堆

二叉堆是完全二叉树或者近似完全二叉树,满足两个特性

当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。一般二叉树简称为堆。

堆的存储

一般都是数组来存储堆,i结点的父结点下标就为(i – 1) / 2。它的左右子结点下标分别为2 * i + 12 * i + 2。如第0个结点左右子结点下标分别为1和2。存储结构如图所示:
堆结构.png

堆排序原理

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注