在 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 备考中,熟练掌握冒泡排序和选择排序的原理、代码实现以及优化方法,对于解决排序相关的问题至关重要。希望通过本周的学习,大家能够在算法方面取得更大的进步,为考试做好充分准备!
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!




