电子说
五 常见排序算法
1 十大经典排序算法
2 冒泡排序
1)算法描述
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
2)实现步骤
3)优缺点
4)适用范围
数据已经基本有序,且数据量较小的场景。
5)场景优化
(1)已经有序了还再继续冒泡问题
(2)部分已经有序了,下一轮的时候但还是会被遍历
(3)只有一个元素不对,但需要走完全部轮排序
3 归并排序
1)算法描述
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。递归的把当前序列分割成两半(分割),在保持元素顺序的同时将上一步得到的子序列集成到一起(归并),最终形成一个有序数列。
2)实现步骤
图源:https://www.cnblogs.com/chengxiao/p/6194356.html
3)优缺点
优点:
缺点:
4)适用范围
大数据量且期望要求排序稳定的场景。
4 快速排序
1)算法描述
快速排序使用分治法策略来把一个序列分为较小和较大的2个子序列,然后递归地排序两个子序列,以达到整个数列最终有序。
2)实现步骤
3)优缺点
优点:
缺点:
4)适用范围
大数据量且不要求排序稳定的场景。
5)场景优化
(1)每次的基准元素都选中最大或最小元素
(2)数列含有大量重复数据
(3)快排的性能优化
5 堆排序
1)算法描述
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
2)实现步骤
3)优缺点
优点:
缺点:
4)适用范围
数据量大且数据呈流式输入的场景。
5)为什么实际情况快排比堆排快?
堆排序的过程可知,建立最大堆后,会将堆顶的元素和最后一个元素对调,然后让那最后一个元素从顶上往下沉到恰当的位置,因为底部的元素一定是比较小的,下沉的过程中会进行大量的近乎无效的比较。所以堆排虽然和快排一样复杂度都是O(NlogN),但堆排复杂度的常系数更大。
6 计数排序
1)算法描述
计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。
2)实现步骤
3)优缺点
优点:
缺点:
4)适用范围
数列元素是整数,当k不是很大且序列比较集中时适用。
5)场景优化
(1)数字不是从0开始,会存在空间浪费的问题
7 桶排序
1)算法描述
桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。实现原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。
2)实现步骤
3)优缺点
优点:
缺点:
4)适用范围
数据服从均匀分布的场景。
8 性能对比
随机生成区间0 ~ K之间的序列,共计N个数字,利用各种算法进行排序,记录排序所需时间。
全部0条评论
快来发表一下你的评论吧 !