image

编辑人: 人逝花落空

calendar2025-07-20

message1

visits109

{CSP-J 备考之排序算法入门全解析}

一、引言

在 CSP-J 备考中,算法基础是至关重要的一环。排序算法作为其中常见且基础的考点,需要我们深入理解和掌握。本文将重点对比冒泡排序、选择排序、插入排序这三种基础排序算法。

二、冒泡排序

基本思想:通过相邻元素两两比较,将较大的元素逐步“浮”到数组的末尾。每一轮比较都会将当前未排序部分的最大元素放到正确的位置。

时间复杂度:最坏情况和平均情况均为 O(n²)。

优化方向:
1. 当某一轮比较中没有发生任何交换,说明数组已经有序,可以提前结束排序。

代码实现:

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        bool swapped = false;
        for (int j = 0; j < n - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                swap(arr[j], arr[j + 1]);
                swapped = true;
            }
        }
        if (!swapped) break;
    }
}

三、选择排序

基本思想:每一轮在未排序部分中找到最小(或最大)的元素,放到已排序部分的末尾。

时间复杂度:始终为 O(n²)。

优化方向:相对较少,但可以通过减少交换次数来稍微提高效率。

代码实现:

void selectionSort(int arr[], int n) {
    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;
            }
        }
        swap(arr[i], arr[minIndex]);
    }
}

四、插入排序

基本思想:将未排序部分的第一个元素插入到已排序部分的适当位置。

时间复杂度:最坏情况和平均情况均为 O(n²),但对于部分有序的数组,性能较好。

优化方向:
1. 提前终止内层循环,当插入元素大于等于已排序部分的最后一个元素时,直接跳过。

代码实现:

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

五、总结

冒泡排序、选择排序和插入排序虽然时间复杂度相同,但在实际应用中,它们的性能特点有所不同。在备考 CSP-J 时,不仅要理解它们的基本思想和实现方式,还要通过大量的练习来熟悉它们的应用场景和优化方法,为后续更复杂的算法学习打下坚实的基础。

希望以上内容对您的 CSP-J 备考有所帮助,祝您取得优异成绩!

喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:{CSP-J 备考之排序算法入门全解析}

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share