公示:相关概念解释及动图来源于https://www.cnblogs.com/onepixel/articles/7674659.html
选择排序的原理很简单,简单到它是最容易想到的排序算法:就是从头开始,每次遍历数组,都把最大或者最小的那个数放在没排序的第一位。但是有些细节需要理清楚,要不然也会造成理解困难。
细节:选择排序是不占额外的空间。怎么做到的呢?它把数组a的空间从前往后,分为有序区和无序区。从i= 0开始遍历数组(即数组的第一个),这时全是无序区,有序区长度为0,遍历第一遍,找到最大或最小的数,跟a[i]交换即可,再把i+1,执行下一次遍历,找到之后再跟a[i]交换。此时,i前面的区域就是有序区,i以及其后面的区域就是无序区。
附上简单明了的实现:
import sys
A = [64, 25, 12, 22, 11]
# 循环数组
for i in range(len(A)):
min_idx = i
for j in range(i + 1, len(A)):
if A[min_idx] > A[j]:
min_idx = j
A[i], A[min_idx] = A[min_idx], A[i]
print("排序后的数组:",A)