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