选择排序-Python

思路:每次选择一个最大或者最小的值排序,为了升序排序,我们选择以最小的值排序

  1.以第0位置的元素为假设最小值

    min_index = 0

  2.遍历列表,比较列表alist[min_index] 与 alist[j]的值,列表中的值比alist[min_index]的值小,发生交换

  此时发生有最小的值则继续判断:当min_index != 0的时候,则发生交换: 

    min_index = 0

    for j in range(len(alist)):

      if alist[j] < alist[min_index]:

        min_index = j

    if min_index != 0:

      alist[0],alist[min_index] = alist[min_index],alist[0]

  3.此时排序出第1位为最小值,因为每次排序的是列表的1,2,3,4...位的元素,所以min_index 等于为遍历列表的次数

  for i in range(len(alist)):

    min_index = i

    for j in range(min_index+1,len(alist)):

      if alist[j] < alist[min_index]:

        min_index = j

    if min_index != i:

      alist[i],alist[min_index] = alist[min_index],alist[i]

  4.代码优化

    1,当比较的时候,可以不与当前位置比较,直接从下一位开始,所以,j的起始点可以变为min_index +1 到列表最后一位

    2.当排序到min_index为列表长度的最后一位时,没有下一位可以比较,所以min_index的最后一次比较为len(alist)-1

def selection_sort(alist):

  for i in range(len(alist)-1):

    min_index = i

    for j in range(min_index+1,len(alist)):

      if alist[j] < alist[min_index]:

        min_index = j

    if min_index != i:

      alist[i],alist[min_index] = alist[min_index],alist[i]

原文地址:https://www.cnblogs.com/Sksitigarbha/p/10144518.html