以下是本人学习极客时间的专栏《数据结构与算法之美》后,自己动手敲代码实现,并写下当时的思考,希望对你也有帮助。
系列文章:
工作后,为什么还要学习数据结构与算法
Python-排序-冒泡排序-优化
选择排序的思想:将一组数据分为两部分,前面是已排序部分,后面是未排序部分,初始状态可认为位置 0 为已排序部分 (数组下标从0开始),其余为未排序部分,每一次都从未排序部分选择一个最小元素放在已排序部分的末尾,然后已排序部分增加一个元素,未排序部分减少一个元素,直到数据全部有序。
算法的过程:
1、第一次从 1 到 n-1 个元素中选择一个最小数据与位置 0 的数据交换
2、第二次从 2 到 n -1 个元素中选择一个最小数据与位置 1 的数据交换
3、第三次从 3 到 n -1 个元素中选择一个最小数据与位置 2 的数据交换
…
思路很简单,可是要真正动手写起来,会发现数组的下标如果处理不当,会有 BUG,而且调试起来也挺费时间,建议在写代码时加上注释,方便自己,更方便别人的理解。
无优化版:
def selection_sort(data_list):
count = 0
length = len(data_list)
for i in range(length -1):
print(data_list) #打印每一次选择后的结果
min_index = i #存储最小值的下标,以便最后交换
for j in range(i+1,length):
count +=1
if data_list[min_index] > data_list[j]:
min_index = j
if min_index != i: #说明需要交换,否则不需要自己自己交换
tmp = data_list[i]
data_list[i] = data_list[min_index]
data_list[min_index] = tmp
print(f"总循环次数为 {count}")
return data_list
现在执行一下,看下代码的运行效果
unsort = [3,