目的:
1.理解冒泡排序并能写出相应的程序
2.理解选择排序并能写出相应的程序
3.理解冒泡排序算法与选择排序的区别
冒泡排序
冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,比较每对相邻的元素,如果它们的顺序错误就把它们交换过来。遍历列表的工作是重复进行的,直到没有需要再交换的元素为止。
冒泡排序的实现
def bubble_sort(arr):
n = len(arr)
# 遍历所有数组元素
for i in range(n):
# 最后i个元素已经排好序,不需要再检查
for j in range(0, n-i-1):
# 如果当前元素比下一个元素大,交换
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
# 测试
array = [64, 34, 25, 12, 22, 11, 90]
sorted_array = bubble_sort(array)
print("排序后的数组:", sorted_array)
选择排序
选择排序是一种简单的排序算法。这个算法每一步从未排序的部分中选出最小(或最大)的元素,存放到已排序的部分的末尾,直到所有元素均排序完毕。
选择排序的实现
def selection_sort(arr):
n = len(arr)
# 遍历所有数组元素
for i in range(n):
# 假设当前元素是最小的
min_idx = i
# 在未排序的部分寻找真正的最小元素
for j in range(i+1, n):
if arr[j] < arr[min_idx]:
min_idx = j
# 将找到的最小元素与当前元素交换
arr[i], arr[min_idx] = arr[min_idx], arr[i]
return arr
# 测试
array = [64, 25, 12, 22, 11]
sorted_array = selection_sort(array)
print("排序后的数组:", sorted_array)
两者的区别
-
排序方式:
- 冒泡排序: 通过不断比较和交换相邻元素来排序。较大的元素逐步“冒泡”到列表的末尾。
- 选择排序: 在未排序部分中选择最小(或最大)的元素,将其放到已排序部分的末尾。
-
交换次数:
- 冒泡排序: 每次遍历过程中,可能会交换多次。
- 选择排序: 每次遍历过程中,只会在确定最小(或最大)元素后进行一次交换。
-
效率:
- 时间复杂度: 两者在最坏情况下的时间复杂度都是O(n^2),其中 n 是列表的长度。
- 空间复杂度: 两者的空间复杂度都是 O(1),即只需要常数级别的额外空间。
-
稳定性:
- 冒泡排序: 稳定。相等的元素不会改变相对顺序。
- 选择排序: 不稳定。相等的元素在排序后可能会改变相对顺序。
这两种算法都非常简单,但在处理大量数据时效率较低。在实际应用中,通常会选择更高效的排序算法,如快速排序或归并排序。
学习基础算法的理由
-
基础概念的理解:
- 学习这些简单的排序算法可以帮助初学者理解排序的基本概念和算法的工作原理。
-
算法设计和分析能力:
- 通过编写和调试这些基本算法,可以培养解决问题的能力和对算法复杂度的理解。
-
算法优化:
- 理解这些基本算法可以帮助开发者理解更复杂算法的设计思路以及优化策略。
-
教育和面试:
- 在计算机科学教育和程序员面试中,理解和能够编写这些基础排序算法是非常常见的要求。
-
控制和灵活性:
- 在某些特定情况下,可能需要对排序过程进行特殊控制,或者在排序过程中进行一些额外操作,了解基础排序算法的实现可以更好地实现这些需求。
使用内置排序函数
另外,直接使用 Python 内置的 sort 函数或 sorted 函数是最简单和高效的方式,因为它们是用高度优化的算法实现的,通常是 Timsort,这是一种混合稳定的排序算法,结合了归并排序和插入排序的优点。使用内置函数不仅可以简化代码,还可以提高性能。
尽管学习基础算法是有价值的,在实际开发中,如果没有特别的需求,使用 Python 的内置排序函数 sort 或 sorted 是最佳选择。它们不仅简单易用,而且性能卓越。以下是如何使用它们的示例:
使用‘sort’函数
array = [64, 34, 25, 12, 22, 11, 90]
array.sort()
print("排序后的数组:", array)
使用‘sorted’函数
array = [64, 34, 25, 12, 22, 11, 90]
sorted_array = sorted(array)
print("排序后的数组:", sorted_array)
1万+

被折叠的 条评论
为什么被折叠?



