选择排序
选择排序和冒泡排序的共同点,都是要进行多轮遍历
因为n个位置一共可以放置n个数据,所以当确定n-1个位置时,n个数字都确定了位置。所以轮数的范围都是n-1.
两者的区别就是每次遍历时,遍历的范围不同
冒泡排序每次输出一个最大或者最小值,对比时都会对比i和i+1位置。所以只用到n-1位置就能获取最后一个位置数据。而且又跟轮数有关。所以最后n-1-j。
选择排序,每次放一个数据到前面,所以每次开始位置和轮数有关。最开始对比的数据就是1位置的。所以范围是1+j~n
#coding:utf-8
def select_sort(alist):
n=len(alist)
for j in range(n-1):#0~n-2
#当范围到n-2位置时,对比已经完成.n个位置确定了n-1个数的位置,最后一个位置也确定。因为区间都是左闭右开,所以n-1能只能取到n-2位置的数据
min_index = j
# 最小值下标,跟轮数有关系
for i in range(1+j,n):
#从1位置开始比较,每次都会后移一位
#需要一直对比到最后一位。
if alist[min_index]>alist[i]:
min_index=i
#找到之后交换,需要退出循环
alist[j],alist[min_index]=alist[min_index],alist[j]