十大排序算法图解:冒泡、快排、归并对比

十大排序算法图解:冒泡、快排、归并对比

数据结构与算法 2026-06-24 10 分钟

十大排序算法图解:冒泡、快排、归并对比

排序算法是算法学习的基础。本文介绍十大排序算法。

1. 冒泡排序

void bubbleSort(int[] arr) {
    for (int i = 0; i < arr.length - 1; i++) {
        for (int j = 0; j < arr.length - 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(1)

2. 选择排序

void selectionSort(int[] arr) {
    for (int i = 0; i < arr.length - 1; i++) {
        int minIdx = i;
        for (int j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[minIdx]) minIdx = j;
        }
        swap(arr, i, minIdx);
    }
}

3. 插入排序

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;
    }
}

4. 快速排序

void quickSort(int[] arr, int low, int high) {
    if (low < high) {
        int pivot = partition(arr, low, high);
        quickSort(arr, low, pivot - 1);
        quickSort(arr, pivot + 1, high);
    }
}

时间复杂度: O(n log n) 平均 | 空间复杂度: O(log n)

5. 归并排序

void mergeSort(int[] arr, int left, int right) {
    if (left < right) {
        int mid = left + (right - left) / 2;
        mergeSort(arr, left, mid);
        mergeSort(arr, mid + 1, right);
        merge(arr, left, mid, right);
    }
}

时间复杂度: O(n log n) | 空间复杂度: O(n)

排序算法对比

算法 平均 最好 最坏 空间 稳定
冒泡 O(n²) O(n) O(n²) O(1)
选择 O(n²) O(n²) O(n²) O(1)
插入 O(n²) O(n) O(n²) O(1)
快排 O(n log n) O(n log n) O(n²) O(log n)
归并 O(n log n) O(n log n) O(n log n) O(n)

总结

选择排序算法时,需要考虑数据规模、稳定性要求和空间限制。一般推荐使用快排或归并。

📚 相关文章