1. 排序算法综合比较表中快排/归并/堆排/插入/计数/基数/桶排序在时间(最好/平均/最坏)、空间、稳定性、原地性、并行友好性上的取舍
给出排序算法的综合比较表,比较快排/归并/堆排/插入/计数/基数/桶排序在时间(最好/平均/最坏)、空间、稳定性、原地性、并行友好性上的取舍?
- 各排序算法的时间复杂度三档
- 空间复杂度与原地性
- 稳定性与并行友好性
各种排序的时间复杂度:快排最好/平均 O(n log n)、最坏 O(n²)(可用随机化/三取样避免);归并恒 O(n log n) 但需 O(n) 辅助空间;堆排恒 O(n log n) 且原地,但不稳定;插入排序最好 O(n)、平均/最坏 O(n²),稳定、原地,适合小规模;计数排序 O(n+k) 且稳定,适用于值域小;基数排序 O(d·(n+k)) 稳定,适用于位/字符串;桶排序均匀分布下期望 O(n),稳定。空间:快排/堆排 O(1)(快排递归栈 O(log n))、归并 O(n)、计数/基数 O(k)、桶 O(n+k)。稳定性:快排、堆排、选择不稳定;归并、插入、计数、基数、桶稳定。并行友好性:归并/基数/桶易并行,快排中等的分治并行,堆排/计数/插入较差。
选型要看数据规模、值域、稳定性、内存:通用大数组用快排(随机化防退化);需要稳定用归并;内存受限用堆排;小规模或近有序用插入;值域小的整数用计数/基数;分布式并行用归并。没有一个算法全优,取舍由场景决定。