python:排序算法——选择排序

1、什么是选择排序?

所谓选择排序,它是排序算法中,一种简单、直观且灵巧的排序算法,但是速度不是很快。选择排序,见名思意就是选择一个元素,与其他元素进行比较,将一个个的最大或最小值拿出来,放到另一个列表中的这个过程,或者说行为我们称之为选择排序。

2、工作原理

(1)首先得有一个需要排序的列表,比如数字列表

(2)拿到这个列表以后,我们需要创建一个新的空列表,作为排序后返回的列表

(3)那么外循环是必须要有的,循环的次数呢是列表的长度,因为我们要对列表中的每一个元素进行一系列的操作

(4)循环体里面需要一个函数,这个函数为整个算法的核心,这个函数的工作是要拿到这个列表中的极端值,就是最大或者最小值。因为我们不知道这个这个列表中的最大或者最小值是哪一个,所以我们必须选择一个假设为极端值,为了更好的循环和处理元素,我们拿取第一个元素与列表中的其他值做比较,当比该元素小就记录该值和该值在列表中的索引,最后返回一个索引。

(5)当调用该函数并返回一个索引后,我们要通过该索引拿到列表中对应的值,并删除该列表中的这个索引的元素,这里就用到了一个方法 pop ,删除该列表中的此索引的元素,并返回该值

(6)此时,因为删除了一个极端值,所以该列表中的下标索引就会全部向前移动一个位置,这样每次调用函数的时候,就保证了每次拿到的索引都是极端值索引

(7)将每次拿到的极端值存储到新列表的末端

(8)当for循环迭代完成之后,我们要返回新的列表,该列表就是排好序的列表

3、源码如下

**注意:**这里只详细介绍升序排列,即 小 ==> 大 排列,那么从大到小排列只需要修改判断条件即可实现

def small(list):
    # 假设最小元素是第一个元素
    small_element = list[0]
    # 那么索引就为0
    small_index = 0
    # 遍历从1开始的索引
    for index in range(1, len(list)):
        # 依次与最小元素进行比较
        if list[index] < small_element:
            # 如果比最小元素小,那么该值就变为最下元素
            small_element = list[index]
            # 并拿到该元素的索引
            small_index = index
    # 最后返回最小元素的索引
    return small_index


def sort(oldlist):
    # 创建一个空列表,来存储排好序的元素
    new_list = []
    for element in range(len(oldlist)):
        # 拿到最小索引
        least_index = small(oldlist)
        # 在旧的列表中将该索引的元素的删除,并返回该元素的值,并将该值添加到新列表末尾
        new_list.append(oldlist.pop(least_index))
    # 最后返回新列表
    return new_list


if __name__ == '__main__':
    mylist = [12, 34, 11, 76, 1, 9, 39, 788]
    newlist = sort(mylist)
    print(newlist)

运行结果如下:

[1, 9, 11, 12, 34, 39, 76, 788]

Process finished with exit code 0