六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序
冒泡排序
稳定 O(n^2)
算法:通过相邻比较,每一趟都将剩余的数中的最值移到最右
选择排序
不稳定 O(n^2)
算法:1.初始状态无序区为[1, n] ,有序区为空
2.第一趟:在无序区中选出最小的记录R[k]与无序区第1个记录交换,使R[1,1]和R[2,n]分别变成记录个数+1和-1的新区
3.重复,知道无序区只有一个
归并排序
O(nlogn)
算法:将已有序的子序列合并,得到完全有序序列
例如:二路归并
1.申请空间,使其大小为已排序列之和,该空间用来存放合并后的序列。
2.设定两个指针,放在各自起始位置
3.比较两个指针所指向的元素,选择较小的放在合并空间,移动指针到下一个位置,重复3,直到一方超出序列尾。
4.将另一个序列所剩下的所有元素直接复制直到合并序列尾
插入排序
稳定 O(n^2)
算法:把n个待排序的元素看成一个有序表和一个无序表。开始时,有序表只包含一个元素,无序表n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表合适的位置,成为新的有序列表。
插排序分为:直接、二分、链表、希尔
二分:插入A[i]时,取A[(i-1)/2]和关键码与A[i]比较
希尔排序
算法:把记录按下标的一定增量分组,对每组使用直接插入排序算法,随着增量逐渐减小,每组包含的关键词越俩越多,当增量减小到1时完成。
基数排序
根据个位数将所有数分配到0–9个桶里,然后将桶里的值重新串起来成为一个数列,再按十位… …
计数排序
须知最小值和最大值,且需要申请额外空间,且须为整数
1.根据max-min+1申请空间
2.将每一个元素出现的次数,记录到对应的位置
3.整理
例如: -1 2 2 3 排序
申请空间[-1,3]
-1出现1次,0出现0次 1出现0次 2出现2次 3出现1次
从最小值开始整理,将出现大于等于1次的拿出,出现n次的数拿n次。
快速排序
基本思想:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以达到全部数据变成有序。
步骤:
(1) 从数列中挑出一个基准值。
(2) 将所有比基准值小的摆放在基准前面,所有比基准值大的摆在基准的后面(相同的数可以到任一边),在这个分区退出之后,该基准就处于数列的中间位置。
(3) 递归地把基准值前面的子数列和基准值后面的子数列进行排序。
详细图解:https://blog.youkuaiyun.com/jiangtianjiao/article/details/88929408
本文深入讲解了六种经典的排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序和快速排序。分析了每种算法的时间复杂度、稳定性,并提供了归并排序和基数排序的实现思路,以及计数排序的适用场景。
23万+

被折叠的 条评论
为什么被折叠?



