简述
数据的排序,是数据结构重要的内容之一, 在软件编程的应用领域必不可少,十分重要。 说到排序会想到:时间复杂度 、空间复杂度 和 排序算法的应用场景, 不同的排序算法有它特定的应用场景,也就是说没有最好的算法,只有最适合的算法。 排序算法涉及的基本操作:元素的比较 、元素的移动, 对于时间和空间的复杂度与它们的次数正相关。为此个人认为,好的排序算法便是能适合特定场景,且元素的比较和移动次数,稳定在可接受范围内。
1. 冒泡
在个数为n集合中, 从第1个元素开始,依次与后面的元素比较,将最大值往后交换,向气泡一样,第一轮排序后,最后的元素便是最大的;
依次类推,第2轮冒泡比较,得到n-1位置的元素, 第n-1轮冒泡比较,则整个集合有序。
算法时间复杂度 O(n^2). 冒泡排序有个明显的缺点:每次比较条件满足后,都会有元素的交换操作。
2. 选择
在个数为n的集合中,第一次从n个元素中选择出最大的元素 ; 第二次选择剩下n-1个元素中最大的元素; 经过n-1次选择后,则得出整个集合元素有序。选择排序与冒泡排序的最大区别是比较后是否有元素位置的交换。
3. 插入
插入排序的思想是,在个数为n的集合中,已知前 a-1 的元素均有序, 将第 a 个元素 ,从 a-1 位置依次往前比较, 如果比其大,则进行交换,直到找到比其小的元素,即找到插入位置,本轮插入结束。
算法从第二个元素开始插入运算, 经过 n-1 轮插入运算, 则整个集合有序。
4. 希尔
原文:https://www.cnblogs.com/ymxsnsp/p/13417815.html