插入排序(Insertion Sort)
插入排序是一种比较类排序算法,通过构建有序序列,对于未排序元素,逐个插入到已排序部分的正确位置。
📌 算法原理解释
- 从第 2 个元素开始,取出当前元素;
- 与已排序部分从后向前比较,找到合适插入位置;
- 将元素插入到该位置,保证已排序部分有序;
- 重复直到所有元素排序完成。
插入排序对部分有序数组效率较高,最好时间复杂度为 O(n)。
💻 多语言代码实现
// JavaScript 插入排序
function insertionSort(arr) {
for (let i = 1; i < arr.length; i++) {
let key = arr[i];
let j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
return arr;
}
`
# Python 插入排序
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
return arr
// C++ 插入排序
#include <vector>
using namespace std;
void insertionSort(vector<int>& arr) {
int n = arr.size();
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
// Java 插入排序
public class InsertionSort {
public static void insertionSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
}
<?php
// PHP 插入排序
function insertionSort(array &$arr): array {
$n = count($arr);
for ($i = 1; $i < $n; $i++) {
$key = $arr[$i];
$j = $i - 1;
while ($j >= 0 && $arr[$j] > $key) {
$arr[$j + 1] = $arr[$j];
$j--;
}
$arr[$j + 1] = $key;
}
return $arr;
}
?>
// Go 插入排序
package main
func insertionSort(arr []int) []int {
for i := 1; i < len(arr); i++ {
key := arr[i]
j := i - 1
for j >= 0 && arr[j] > key {
arr[j+1] = arr[j]
j--
}
arr[j+1] = key
}
return arr
}
✅ 算法特点与总结
| 属性 | 描述 |
|---|---|
| 时间复杂度 | 最坏/平均 O(n²),最好 O(n) |
| 空间复杂度 | O(1)(原地排序) |
| 稳定性 | ✅ 稳定 |
| 是否原地排序 | ✅ 是 |
📌 提示:插入排序适合部分有序或小规模数据排序,简单且性能良好。
相关内容
- 冒泡排序(Bubble Sort) 冒泡排序是一种基础且易懂的排序算法,适合小规模数据排序。本文提供冒泡排序的算法原理与 JavaScript、Python、C++、Java、PHP、Go 多语言...
- 基数排序(Radix Sort) 基数排序是一种非比较类排序,适用于整数或定长字符串。本文介绍 LSD 方式的基数排序算法,提供 JavaScript、Python、C++、Java、PHP、G...
- 选择排序(Selection Sort) 选择排序是一种简单直观的排序算法,通过反复选择最小元素放到前面实现排序。本文讲解算法原理,并提供 JavaScript、Python、C++、Java、PHP、...
- 希尔排序(Shell Sort) 介绍希尔排序的原理和分组插入策略,适用于中等规模数据。附带 JavaScript、Python、C++、Java、PHP、Go 多语言实现代码,助你深入理解。
- 归并排序(Merge Sort) 介绍归并排序的分治法思想、稳定性特点和适用场景,附带 JavaScript、Python、C++、Java、PHP、Go 多语言实现及详细解析,帮助深入理解。
- 快速排序(Quick Sort) 讲解快速排序的分治思想与实现步骤,适合处理大规模数据,附带 JavaScript、Python、C++、Java、PHP、Go 多语言代码及详细说明