十大基本排序算法可分为比较排序和非比较排序两大类,以下是具体分类及代表算法:
一、比较排序(基于元素比较)
-
冒泡排序
-
特点 :简单直观,稳定,平均时间复杂度O(n²),空间复杂度O(1)。
-
原理 :通过相邻元素交换,将最大值逐步“浮”到末尾。
-
-
选择排序
-
特点 :每次选择最小(或最大)元素放到已排序序列末尾,不稳定,平均时间复杂度O(n²)。
-
原理 :遍历未排序部分,找到最小元素与当前位置交换。
-
-
插入排序
-
特点 :构建有序序列,稳定,平均时间复杂度O(n²),适用于小规模数据。
-
原理 :将未排序元素逐个插入到已排序序列的合适位置。
-
-
希尔排序
-
特点 :插入排序的优化版,通过增量序列减少比较次数,平均时间复杂度O(n log n)~O(n²)。
-
原理 :先对距离较远的元素进行排序,逐步缩小增量至1。
-
-
归并排序
-
特点 :分治法典型代表,稳定,时间复杂度O(n log n),需要额外空间O(n)。
-
原理 :递归分解序列,合并有序子序列。
-
-
快速排序
-
特点 :高效且常用,平均时间复杂度O(n log n),不稳定,空间复杂度O(log n)。
-
原理 :选取基准元素划分序列,递归排序子序列。
-
-
堆排序
-
特点 :原地排序,时间复杂度O(n log n),不稳定。
-
原理 :构建大根堆或小根堆,通过交换堆顶元素与末尾元素重排。
-
二、非比较排序(基于元素分布)
-
计数排序
-
特点 :线性时间复杂度O(n+k),稳定,适用于整数排序。
-
原理 :统计元素出现次数,通过累加确定元素位置。
-
-
基数排序
-
特点 :线性时间复杂度O(nk),稳定,适用于整数或字符串排序。
-
原理 :按位(或字符)逐级排序,利用计数排序作为子过程。
-
-
桶排序
-
特点 :平均时间复杂度O(n),稳定,适用于均匀分布数据。
-
原理 :将数据分配到多个桶中,分别排序后合并。
-
总结
-
比较排序 :通用性强,但效率受数据特性影响(如快速排序对极端数据敏感)。
-
非比较排序 :在特定场景下效率更优(如基数排序对整数排序),但适用范围有限。
选择时需根据数据规模、分布及稳定性需求权衡。