经典排序算法2-选择排序(Python实现)

经典排序算法之选择排序

选择排序法可使用两种方式排序,即在所有的数据中,当从大到小排序时,将最大值放入第一个位置;当从小到大排序时,将最大值放入最后一个位置。例如,一开始在所有当数据中挑选一个最小项放在第一个位置(假设是从小到大排序),再从第二项开始挑选一个最小项放在第二个位置,从此反复,直到排序完成为止。
以下我们采用10, 8, 44, 9, 12, 37, 21, 5来完成排序示例:

  • 首先,我们选定数组第一个元素,即元素10。
  • 然后从数组的第二项开始,依次与10进行比较。
  • 如果发现比10小的元素,即与10交换位置。
  • 到元素8时,发现符合条件,即与10交换位置。

此时数组为:
[8, 10, 44, 9, 12, 37, 21, 5]
到元素5时,我们发现又找到了符合条件到元素,此时也到了数组末尾,因此第一次遍历完成后数组为:
[5, 10, 44, 9, 12, 37, 21, 8]
第二次遍历从数组到第二个元素开始,即从10开始。重复第一轮排序的步骤即可。过程如下:
[5, 10, 44, 9, 12, 37, 21, 8]
[5, 8, 44, 10, 12, 37, 21, 9]
[5, 8, 9, 44, 12, 37, 21, 10]
[5, 8, 9, 10, 44, 37, 21, 12]
[5, 8, 9, 10, 12, 44, 37, 21]
[5, 8, 9, 10, 12, 21, 44, 37]
[5, 8, 9, 10, 12, 21, 37, 44]
[5, 8, 9, 10, 12, 21, 37, 44]

实现代码如下:

list_chaos = [10, 8, 44, 9, 12, 37, 21, 5]


def sort_select(data):
    length = len(data)
    for i in range(length):
        for j in range(i + 1, length):
            if data[i] > data[j]:
                data[i], data[j] = data[j], data[i]
        print(data)


sort_select(list_chaos)

选择排序法分析

  1. 最佳/最坏/平均情况都需要找到最大(最小)值,因此比较次数为(n-1)+(n-2)+(n-3)+…+3+2+1=[n(n-1)]/2次,即时间复杂度为O(n^2)
  2. 由于选择排序是以最大/最小值直接与最前方为排序的键值交换,数据排列顺序有可能改变,因此是不稳定排序法
  3. 只需一个额外空间,所以空间复杂度为最佳
  4. 此排序法适用于数据量小或有部分数据已经排过序的情况

猜你喜欢

转载自blog.csdn.net/airenKKK/article/details/89596528