选择排序-Python
思路:每次选择一个最大或者最小的值排序,为了升序排序,我们选择以最小的值排序
1.以第0位置的元素为假设最小值
min_index = 0
2.遍历列表,比较列表alist[min_index] 与 alist[j]的值,列表中的值比alist[min_index]的值小,发生交换
此时发生有最小的值则继续判断:当min_index != 0的时候,则发生交换:
min_index = 0
for j in range(len(alist)):
if alist[j] < alist[min_index]:
min_index = j
if min_index != 0:
alist[0],alist[min_index] = alist[min_index],alist[0]
3.此时排序出第1位为最小值,因为每次排序的是列表的1,2,3,4...位的元素,所以min_index 等于为遍历列表的次数
for i in range(len(alist)):
min_index = i
for j in range(min_index+1,len(alist)):
if alist[j] < alist[min_index]:
min_index = j
if min_index != i:
alist[i],alist[min_index] = alist[min_index],alist[i]
4.代码优化
1,当比较的时候,可以不与当前位置比较,直接从下一位开始,所以,j的起始点可以变为min_index +1 到列表最后一位
2.当排序到min_index为列表长度的最后一位时,没有下一位可以比较,所以min_index的最后一次比较为len(alist)-1
def selection_sort(alist):
for i in range(len(alist)-1):
min_index = i
for j in range(min_index+1,len(alist)):
if alist[j] < alist[min_index]:
min_index = j
if min_index != i:
alist[i],alist[min_index] = alist[min_index],alist[i]