Python选择排序的步骤与优化方法
选择排序(Selection Sort)是一种简单直观的排序算法。它的基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余未排序元素中继续寻找最小(或最大)的元素,放到已排序序列的末尾。重复这个过程,直到全部待排序的数据元素排完为止。
选择排序的步骤可以总结如下:
- 遍历待排序的序列,标记当前位置为最小元素的位置。
- 从标记的位置后面的元素中找到一个比当前最小元素还要小的元素,并更新标记位置。
- 将标记位置的元素与最小元素位置的元素进行交换。
- 以标记位置后面的元素为新的起始位置,重复步骤2和步骤3。
选择排序的优化方法有:
- 在每次遍历时,同时找到最小元素和最大元素,并同时进行交换。这样可以减少交换次数,提高排序效率。
- 加入一个判断,如果遍历过程中没有发生交换,即已经完成排序,则提前终止排序过程。
下面是Python中的选择排序代码示例:
def selection_sort(arr):
n = len(arr)
for i in range(n - 1):
min_pos = i
max_pos = i
for j in range(i + 1, n):
if arr[j] < arr[min_pos]:
min_pos = j
if arr[j] > arr[max_pos]:
max_pos = j
if min_pos != i:
arr[i], arr[min_pos] = arr[min_pos], arr[i]
if max_pos == i:
max_pos = min_pos
if max_pos != n - 1 - i:
arr[n - 1 - i], arr[max_pos] = arr[max_pos], arr[n - 1 - i]
if min_pos == n - 1 - i:
min_pos = max_pos
if min_pos != i:
arr[i], arr[min_pos] = arr[min_pos], arr[i]
return arr
# 测试
arr = [64, 25, 12, 22, 11]
print("排序前:", arr)
sorted_arr = selection_sort(arr)
print("排序后:", sorted_arr)
以上代码中,我们使用变量 min_pos
记录最小元素的位置,使用变量 max_pos
记录最大元素的位置。在每次遍历中,通过比较更新这两个位置,然后进行交换。在列表长度为奇数时,如果 min_pos
和 max_pos
的位置刚好重合于起始位置,我们需要对交换后的位置进行检查和处理。