排序算法至关重要,它和查找算法一块儿做为整个算法体系的基石算法
对用例来讲,处理一组有序数据总要比处理一组无序数据容易得多。数组
好比要在数组中查找特定元素,若是数组是总体有序的,查找会很是轻松(经典的二分查找算法就要求数据集的是总体有序的,其运行的平均时间复杂度仅为 O(log n)),否则用例恐怕只得遍历一遍数组了!数据结构
自人类步入信息时代, 近几十年来,生产的信息已超过过去5000年的总和。而信息经过数据存储和传输。如此巨量的数据若是不通过有序性的组织,而全以杂乱无章存在,那必然会大大增长人类社会的复杂性,让处理不少问题变得不可能。有了以前聊到的诸多排序算法存在,才得以让人类社会以更加简单的方式运行。搜索引擎
有强迫症的同窗会很是乐于将物品按照某种顺序组织好,以便后续取用;字典中将文字按照字母顺序印刷,再结合编撰好的索引,咱们就能快速从中找到待查文字;搜索引擎返回的结果将网页按照与关键词的相关程度排序;Windows 系统的资源管理器、各类花名册,甚至于咱们参加集体活动时须要列队都是按照身高排列……排序
排序的应用是如此普遍,结合计算机,排序算法又是如此的重要!有序性总会使待解决的问题更容易解决,因此排序常常做为待解决问题的一个子问题存在。想象一下,对比杂乱无序的一组数据,你是否是更乐于处理整洁有序的一组数据?索引
前面七篇文章咱们依次聊了——冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序和快速排序这几种主要的排序算法,来列张表对比总结下:资源
排序算法 | 稳定性 | 原地排序 | 时间复杂度 | 空间复杂度 | 补充说明 |
---|---|---|---|---|---|
冒泡排序 | Y | Y | 平均 O(n^2) | O(1) | 最简单的排序算法 |
选择排序 | N | Y | 平均 O(n^2) | O(1) | 运行时间输入无关 |
插入排序 | Y | Y | 平均 O(n^2) | O(1) | 运行时间严重依赖输入,待排序数组若是已经总体有序,则只需线性级别的时间复杂度 |
希尔排序 | N | Y | 最坏 О(n log²n);最佳O(n) | O(1) | 改进版插入排序 |
堆排序 | N | Y | 恒为 O(n log n) | O(1) | 依赖于二叉堆这种数据结构 |
归并排序 | Y | N | 恒为 O(n log n) | O(n) | 应用普遍,须要额外辅助空间 |
快速排序 | N | Y | 平均 O(n log n) | 依赖于具体实现 | 应用最普遍的排序算法,运行效率由几率保证 |
排序算法的稳定性是指算法是否会保持数组中键值相同元素的相对顺序不变。table
快速排序是当下最快的通用排序算法。效率
如上所述,排序算法至关重要,它和查找算法一块儿做为整个算法体系的基石。OK下篇文章,咱们开始聊查找~搜索
完。