15 Sep 2019
直接选择排序算法
直接选择排序算法
思路:直接选择排序算法即每次将数据的最大/最小放到数据的最后/前,经过两个for循环就可以达到排序的目的。
代码实现
Python实现
class DirectSelectSort:
@staticmethod
def sort(array):
min_index = len(array) - 1
for i in range(min_index):
index = 0
# 找到最大数的索引
for j in range(1, min_index + 1):
if array[index] > array[j]:
continue
index = j
# 交换数据
if index < min_index:
array[min_index], array[index] = array[index], array[min_index]
min_index = min_index - 1
print("i:%s, min_index:%s, index:%s, array:%s" % (
i, min_index, index, array
))
return array
def main():
array = [5, 3, 2, 1, 9, 8, 4, 0]
print("直接选择排序:%s" % DirectSelectSort.sort(array))
输出结果
# 本算法实现每次从后往前开始放最大的数据,第一次是[..., 9],第二次是[..., 8, 9]
i:0, min_index:6, index:4, array:[5, 3, 2, 1, 0, 8, 4, 9]
i:1, min_index:5, index:5, array:[5, 3, 2, 1, 0, 4, 8, 9]
i:2, min_index:4, index:0, array:[4, 3, 2, 1, 0, 5, 8, 9]
i:3, min_index:3, index:0, array:[0, 3, 2, 1, 4, 5, 8, 9]
i:4, min_index:2, index:1, array:[0, 1, 2, 3, 4, 5, 8, 9]
i:5, min_index:1, index:2, array:[0, 1, 2, 3, 4, 5, 8, 9]
i:6, min_index:0, index:1, array:[0, 1, 2, 3, 4, 5, 8, 9]
直接选择排序:[0, 1, 2, 3, 4, 5, 8, 9]
附录
- 时间复杂度:$O(n^2)$
- 空间复杂度:$O(1)$
- 稳定性:不稳定
- 复杂度:实现简单
博文
Til next time,
LinkWorld
at 16:12