image

编辑人: 浅唱

calendar2025-11-10

message8

visits150

冲刺阶段第 2 周:深入解析冒泡排序与选择排序

在 CSP-S 备考的冲刺阶段,算法基础是我们必须要扎实掌握的重要内容。本周,我们将重点聚焦于两种常见的排序算法——冒泡排序和选择排序。

一、冒泡排序的基本思想

冒泡排序就如同水中的气泡逐渐上浮一样,它通过相邻元素的比较和交换,使得每一趟循环都能找到未排序部分的最大值或最小值,并将其放到正确的位置。

算法步骤
1. 从数组的第一个元素开始,依次比较相邻的两个元素。
2. 如果顺序不对(例如,对于升序排列,前一个元素大于后一个元素),则交换它们的位置。
3. 重复上述过程,直到整个数组有序。

时间复杂度
最坏情况和平均情况下,时间复杂度均为 O(n^2),其中 n 是数组的长度。

二、选择排序的基本思想

选择排序则是每一趟在未排序部分中找到最小值或最大值,并将其放到已排序部分的末尾。

算法步骤
1. 在未排序序列中找到最小元素。
2. 将其与未排序序列的第一个元素交换位置。
3. 从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。
4. 重复以上步骤,直到所有元素均排序完毕。

时间复杂度
无论最好情况还是最坏情况,时间复杂度都为 O(n^2)。

三、通过实例演示代码实现及优化方法

假设我们有一组机器人传感器获取的距离数据,需要按照距离远近进行排序。

以下是冒泡排序的代码实现:

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]

而选择排序的代码实现为:

def selection_sort(arr):
    n = len(arr)
    for i in range(n):
        min_index = i
        for j in range(i+1, n):
            if arr[j] < arr[min_index]:
                min_index = j
        arr[i], arr[min_index] = arr[min_index], arr[i]

优化方法
对于冒泡排序,我们可以采用提前终止的策略。如果在某一趟排序中没有发生任何交换,说明数组已经有序,可以提前结束排序。

优化后的冒泡排序代码:

def optimized_bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        if not swapped:
            break

总之,在 CSP-S 备考中,熟练掌握冒泡排序和选择排序的原理、代码实现以及优化方法,对于解决排序相关的问题至关重要。希望通过本周的学习,大家能够在算法方面取得更大的进步,为考试做好充分准备!

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

创作类型:
原创

本文链接:冲刺阶段第 2 周:深入解析冒泡排序与选择排序

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