原理:
我们假设第一个元素是最大值,与相邻元素对比,如果右侧元素比我们假设的最大元素大,那么最大元素的位置右移,直到遇到右侧的数小于最大值的情况,直接当前最大值放置到列表最后的位置.
3 |
5 |
8 |
6 |
9 |
我们假设3为最大元素
第一遍:
- 3 <5 说明 5才最大 max_index 移到5的位置 3 5 8 6 9
- 5 <8 说明 8才最大 max_index 移到8的位置 3 5 8 6 9
- 8 >6 将8移动到最右侧 3 5 6 9 8
第二遍:
- 3 <5 说明 5才最大 max_index 移到5的位置 3 5 6 9 8
- 5 <6 说明 6才最大 max_index 移到6的位置 3 5 6 9 8
- 6 <9 说明 9才最大 max_index 移到9的位置 3 5 6 9 8
- 9 >8 将9移动到最右侧 3 5 6 8 9
代码实现
核心代码:
for i in range(0, len(alist)-1):# 找出最大值的下标
if alist[max_index] < alist[i+1]:
max_index = i +1 # 最大值下标右移
alist[max_index], alist[len(alist)-1-j] =alist[len(alist)-1-j], alist[max_index] # 交换最大值到最右侧
完整代码实现:
def sort(alist):
for j in range(0,len(alist)-1):
max_index = 0 # 最大值的下标,开始假设第0个元素为最大值
for i in range(0, len(alist)-1-j):# 找出最大值的下标
if alist[max_index] < alist[i+1]:
max_index = i +1 # 最大值索引右移
alist[max_index], alist[len(alist)-1-j] =alist[len(alist)-1-j], alist[max_index] # 交换最大值到最右侧
return alist