排序算法:概述
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法:概述相关的知识,希望对你有一定的参考价值。
排序算法(一):概述
排序是程序开发中一种非常常见的操作,对一组任意的数据元素(或记录)经过排序操作后,就可以把他们变成一组按关键字排序的有序队列。
对于排序算法从以下几点去衡量算法的优劣:
- 时间复杂度,所谓时间复杂度就是将一组数从无序到有序所花费的时间,通常使用一个量级去衡量,比如O(n) 或者 O(n*n)
- 空间复杂度,所谓空间复杂度就是在排序过程中使用辅助空间的大小,通常也是使用一个量级去衡量,比如O(n) 或者 O(n*n)
- 是否稳定,所谓排序算法是否稳定的定义是对于相等的两个元素,在排序之后元素的位置是否互换,比如一个数组array array[i]与array[j]相等且(i<j),如果排序后array[i]与array[j]相互交换,我们则说这个排序是不稳定的,否则是稳定的。
对于排序算法的分类:
- 内部排序,所谓内部排序就是整个排序过程中都是在内存中,无需借助磁盘就可以完成排序,即为内部排序
- 外部排序,所谓外部排序就是数据量比较大,无法一次性将数据载入内存,需要内存与磁盘的多次数据交换才能完成的排序,即为外部排序
外部排序:
- 多路归并排序
- 败者树
内部排序:
- 插入排序:直接插入排序,希尔排序
- 选择排序:简单选择排序,堆排序
- 交换排序:冒泡排序,快速排序
- 归并排序
- 基数排序
- 桶排序
- 计数排序
排序算法整体印象图(来自网络截图),我们先对整体的排序算法一个概括,后续会详细的一一介绍
算法种类 | 排序算法 | 平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 | 是否稳定 |
插入排序 | 直接插入排序算法 | O(n2) | O(n) | O(n2) | O(1) | 稳定 |
希尔排序算法 | O(nlogn) | O(nlogn2) | O(nlogn2) | O(1) | 不稳定 | |
选择排序 | 简单选择排序算法 | O(n2) | O(n2) | O(n2) | O(1) | 不稳定 |
堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不稳定 | |
交换排序 | 冒泡排序算法 | O(n2) | O(n) | O(n2) | O(1)/无需 | 稳定 |
快速排序算法 | O(nlogn) | O(nlogn) | O(n2) | O(logn) | 不稳定 | |
-- | 归并排序算法 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 稳定 |
-- | 基数排序算法 | O(n*k) | O(n*k) | O(n+k) | O(k) | 稳定 |
-- | 桶排序算法 | O(n+k) | O(n+k) | O(n2) | O(n+k) | 稳定 |
-- | 计数排序算法 | O(n+k) | O(n+k) | O(n+k) | O(k) | 稳定 |
欢迎大家一块探讨
以上是关于排序算法:概述的主要内容,如果未能解决你的问题,请参考以下文章