常用排序算法

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

1. 冒泡排序(Bubble Sort)

Java伪代码:
java 复制代码
public class BubbleSort {
    public static void sort(int[] arr) {
        int n = arr.length;
        for (int i = 0; i < n - 1; i++) { // 外层循环控制排序的轮数
            for (int j = 0; j < n - 1 - i; j++) { // 内层循环控制每轮比较的次数
                if (arr[j] > 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伪代码:
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伪代码:
java 复制代码
public class InsertionSort {
    public static void sort(int[] arr) {
        int n = arr.length;
        for (int i = 1; i < n; i++) { // 外层循环从第二个元素开始
            int key = arr[i]; // 当前要插入的元素
            int j = i - 1;
            // 内层循环将已排序部分中大于key的元素向后移动
            while (j >= 0 && arr[j] > key) {
                arr[j + 1] = arr[j];
                j--;
            }
            arr[j + 1] = key; // 将key插入到正确的位置
        }
    }
}
时间复杂度:
  • 最坏情况:O(n²),当数组完全逆序时。
  • 最好情况:O(n),当数组已经有序时。
  • 平均情况:O(n²)。
空间复杂度:
  • O(1),只需要一个临时变量进行交换。
适用场景:
  • 数据规模较小,且对稳定性要求较高的场景。
  • 当数据基本有序时,效率较高。
相关推荐
咖啡八杯16 小时前
GoF设计模式——备忘录模式
java·后端·spring·设计模式
HjhIron19 小时前
面试常客:字符串算法从入门到进阶
算法·面试
吴佳浩21 小时前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
触底反弹1 天前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
SamDeepThinking1 天前
裁掉那个差程序员后,给你看团队里高手的代码:这个习惯,希望你有
java·后端·程序员
vivo互联网技术1 天前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
朕瞧着你甚好1 天前
技术雷达 & Java 集成评估报告 — Apache Tika 3.3.1
java·ai编程
浮生望1 天前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法
黄敬峰1 天前
面试必刷:从JS底层包装类到双指针,彻底搞懂字符串与回文算法
算法
MacroZheng1 天前
短短几天,暴涨2.8万Star!又一款编程神器开源!
java·人工智能·后端