低级排序算法概述
低级排序算法通常指时间复杂度较高但实现简单的排序方法,适用于小规模数据或教学演示。常见算法包括冒泡排序、选择排序和插入排序。
冒泡排序(Bubble Sort)
冒泡排序通过重复遍历列表,比较相邻元素并交换顺序错误的元素,每次遍历将最大元素“冒泡”到末尾。
代码实现
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
std::swap(arr[j], arr[j+1]);
}
}
}
}
时间复杂度
- 最坏情况:O(n²)
- 平均情况:O(n²)
- 最好情况:O(n)(已排序时)
选择排序(Selection Sort)
选择排序每次从未排序部分选择最小元素,放到已排序部分的末尾。
代码实现
void selectionSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
int min_idx = i;
for (int j = i+1; j < n; j++) {
if (arr[j] < arr[min_idx]) {
min_idx = j;
}
}
std::swap(arr[min_idx], arr[i]);
}
}
时间复杂度
- 所有情况:O(n²)
插入排序(Insertion Sort)
插入排序将未排序元素逐个插入到已排序部分的正确位置,类似整理扑克牌。
代码实现
void insertionSort(int arr[], int n) {
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;
}
}
时间复杂度
- 最坏情况:O(n²)
- 平均情况:O(n²)
- 最好情况:O(n)(已排序时)
算法对比
| 算法 | 时间复杂度(最坏) | 空间复杂度 | 稳定性 |
|---|---|---|---|
| 冒泡排序 | O(n²) | O(1) | 稳定 |
| 选择排序 | O(n²) | O(1) | 不稳定 |
| 插入排序 | O(n²) | O(1) | 稳定 |
稳定性说明:稳定排序算法会保持相等元素的原始顺序。
&spm=1001.2101.3001.5002&articleId=160807671&d=1&t=3&u=df021e79bd024fe095d44d289ff3b461)
286

被折叠的 条评论
为什么被折叠?



