5
20
50
慢
中等
快
排序可视化
排序过程
算法详情
直接插入排序 (Insertion Sort)
插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
时间复杂度
O(n²)
空间复杂度
O(1)
稳定性
稳定
适用于小规模数据或基本有序的数据。
算法代码
// 直接插入排序代码
function insertionSort(arr) {
const n = arr.length;
for (let i = 1; i < n; i++) {
let key = arr[i];
let j = i - 1;
// 将大于key的元素向后移动
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
// 插入key
arr[j + 1] = key;
}
return arr;
}
算法比较
| 算法 | 平均时间复杂度 | 最坏时间复杂度 | 空间复杂度 | 稳定性 | 适用场景 |
|---|---|---|---|---|---|
|
直接插入排序
|
O(n²) | O(n²) | O(1) | 稳定 | 小规模数据或基本有序数据 |
|
折半插入排序
|
O(n²) | O(n²) | O(1) | 稳定 | 小规模数据,减少比较次数 |
|
希尔排序
|
O(n log n) 到 O(n²) | O(n²) | O(1) | 不稳定 | 中等规模数据 |
|
冒泡排序
|
O(n²) | O(n²) | O(1) | 稳定 | 教学演示 |
|
快速排序
|
O(n log n) | O(n²) | O(log n) | 不稳定 | 大规模数据 |
|
简单选择排序
|
O(n²) | O(n²) | O(1) | 不稳定 | 小规模数据 |
|
堆排序
|
O(n log n) | O(n log n) | O(1) | 不稳定 | 大规模数据,需要稳定性能 |
|
归并排序
|
O(n log n) | O(n log n) | O(n) | 稳定 | 大规模数据,需要稳定性 |
|
基数排序
|
O(k·n) | O(k·n) | O(n+k) | 稳定 | 整数排序 |
