Home

LinkWorld Algorithm Blog

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

scribble