常用排序算法 - 详解

常见的排序算法有很多种,以下是几种常见的排序算法:

1. 冒泡排序(Bubble Sort)

Java伪代码:
public class BubbleSort {
public static void sort(int[] arr) {
int n = arr.length;
for (int i = 0; i  arr[j + 1]) { // 如果前一个元素大于后一个元素
// 交换两个元素的位置
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
时间复杂度:
  • 最坏情况:O(n²),当数组完全逆序时。
  • 最好情况:O(n),当数组已经有序时。
  • 平均情况:O(n²)
空间复杂度:
  • O(1),只需要一个临时变量进行交换。
适用场景:
  • 数据规模较小,且对稳定性要求不高的场景。
  • 教学或简单应用中,因为其容易理解。

2. 选择排序(Selection Sort)

Java伪代码:
public class SelectionSort {
public static void sort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) { // 外层循环控制选择的轮数
int minIndex = i; // 假设当前元素是最小值
for (int j = i + 1; j < n; j++) { // 内层循环找到最小值的索引
if (arr[j] < arr[minIndex]) {
minIndex = j; // 更新最小值的索引
}
}
// 交换当前元素和找到的最小值
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
}
时间复杂度:
  • 最坏情况:O(n²),无论数组是否有序,都需要进行n(n-1)/2次比较。
  • 最好情况:O(n²),与最坏情况相同。
  • 平均情况:O(n²)
空间复杂度:
  • O(1),只需要一个临时变量进行交换。
适用场景:
  • 数据规模较小,且对稳定性要求不高的场景。
  • 当内存空间有限时,因为其交换次数少。

3. 插入排序(Insertion Sort)

Java伪代码:
public class InsertionSort {
public static void sort(int[] arr) {
int n = arr.length;
for (int i = 1; i = 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key; // 将key插入到正确的位置
}
}
}
时间复杂度:
  • 最坏情况:O(n²),当数组完全逆序时。
  • 最好情况:O(n),当数组已经有序时。
  • 平均情况:O(n²)
空间复杂度:
  • O(1),只需要一个临时变量进行交换。
适用场景:
  • 数据规模较小,且对稳定性要求较高的场景。
  • 当数据基本有序时,效率较高。
posted @ 2025-08-12 22:00  yjbjingcha  阅读(8)  评论(0)    收藏  举报