南昌网站建设业务,南京专业app开发定制,网站留言板制作,专业做网站制作的公司快速排序相比于堆排序的优点有#xff1a; 效率更高#xff1a;快速排序的平均时间复杂度为 O(nlogn)#xff0c;而堆排序的时间复杂度为 O(nlogn)。虽然它们的时间复杂度相同#xff0c;但是在实际情况下#xff0c;快速排序往往比堆排序更快#xff0c;因为快速排序具有…
快速排序相比于堆排序的优点有 效率更高快速排序的平均时间复杂度为 O(nlogn)而堆排序的时间复杂度为 O(nlogn)。虽然它们的时间复杂度相同但是在实际情况下快速排序往往比堆排序更快因为快速排序具有良好的局部性和缓存性能。 原地排序快速排序是一种原地排序算法它不需要额外的空间来存储临时数据。相比之下堆排序需要使用额外的空间来构建和维护堆。 快速排序需的递归栈深度O(n)平均O(log2n)堆排序构建和维护栈不要额外空间 稳定性快速排序是一种不稳定的排序算法意味着相等元素的相对顺序可能会发生改变。而堆排序是一种稳定的排序算法相等元素的相对顺序不会改变。 对于小规模数据集的处理更快当待排序的数据规模较小时快速排序通常比堆排序更快。这是因为快速排序在每次递归时只需要处理部分数据而堆排序需要对整个数据集进行操作。
总体而言快速排序在大多数情况下更加高效且具有更好的性能表现但在某些特殊情况下堆排序可能更适合使用。 插入排序系
插入排序每次查找未排序记录的第一个在已排序记录中的位置比较的过程中将大者后移一位希尔排序间隔从大到小每次用插入排序折半查找每次找到位置什么时候更新
选择排序
本体每次从未排序中选最小的放在前面堆排序——optimal applied situation/scene1亿个只取100个最大的 构建initial堆按插入最小堆的构建O(n)筛选法从 ⌈ \lceil ⌈ n/2 ⌉ \rceil ⌉ 的位置开始将该节点(以最小堆为例)下移到左右子均比它大用时最坏O(n)最好(n/2)平均O(n) 排序每次将堆顶与堆尾交换再下移新堆顶用时O(nlog2n) 12总用时O(nlogn) 插入放到堆尾上移到比双亲大 删除与堆尾交换原堆尾再下移到比孩子小删除新的堆尾
交换排序
冒泡排序从后往前每次把最小的放到最前边快速排序任取一点(队首)分治法左边为小的右边为大的逆序对交换递归层数(log2n - n)
归并和基数
归并与希尔的共同点都有一个超参幂乘
2路归并归并段直接比较即可不同归并段的合并用额外空间比较次数n2n-1log2n次归并O(nlog2~n)k路平衡归并败者树初始二叉树用时k-1有序归并段中取出新的最小值用时O(log2k)一趟合并用时O(nlog2k)共O(nlog2k log~k n)O(nlog2n)初始归并段的获得可用快排平均O(nlog2k)最坏O(n2)置换-选择得到的为非平衡败者树用时O(nlog2|WA|)
基数排序按位数从小到大用计数排序 计数排序可用1数组形式~~2每个数据需要包含一个指针r个队列(数据数位0-r-1)存储当次排序的首指针~~算了我们还是用标准的数组把
外部排序
数据量太大内存放不下一般采用归并方法每次取一小段排好了再放回去对m路归并内存缓冲区分成2m个输入区和2个输出区(存放归并完成的结果)*21个存放内存到缓冲区的交互一个用于中和缓冲区和外存的交互 缓冲区1写满了就全部放到buffer2接着往buf1写同时buf2并行写入memory如何减小归并趟数进而减小访存次数
增大归并的路数但直接比较来确定r个有序队列最小值导致比较用时上升采用败者树可以抵消路数增大导致的比较时间变长增大初始段长置换-选择法将初始序列通过k|WA|的败者树分成不定长有序初始段的集合段长即为为归并代价 —— 利用Huffman算法得到合并路径的规划方案k路不平衡归并总用时2*WPL*log2k O(WPL*log2k)