思路:1、选择排序是将其分成两部分,左边是排好序的,右边是还没排好的,一开始,左边就是空,我们让最小值的下标为移动比较的变量
即min_index=0来实现第一次的排序
选择排序的思路是一次找到没有排序那边中最小的数,把它放到左边0位置上
继续找到没有排序那边最小的数,放置左边1位置上,以此类推
从右边无序中找到最小的,让它跟在左边最后(形式上如此,交换位置)
我们写出第一个位置的排序如下:
#coding:utf-8 def select_sort(alist): min_index=0 n=len(alist) for i in range(1,n): if alist[min_index]>alist[i]: min_index=i alist[0],alist[min_index]=alist[min_index],alist[0] a=[8,5,9,3,5,1,50] print(a) select_sort(a) print(a)
2、根据上面说的思路,我们需要另一个循环,这时候for j in range()中的j就表示要进行多少次
[11,2,15,6,9]
以这个为例子,我们清楚可以知道当我们进行到倒数第二个元素的时候其实就可以了,这时候最后一个元素肯定是最大值,倒数第二个元素所在位置为n-2,所以我们取到n-1
min_index就是我们每次都要更新的值
而上面写的内循环,起始位置是min_index+1,因为循环内部我们把min_index设置为这次查找的默认最小值
所以内循环为for i in range(j+1,n)
注意一次内循环结束后,刚好改变一个j,进而重新循环,将min_index更新为下一个j
#coding:utf-8 def select_sort(alist): n=len(alist) for j in range(0,n-1): min_index=j for i in range(j+1,n): if alist[min_index]>alist[i]: min_index=i alist[j],alist[min_index]=alist[min_index],alist[j] a=[8,5,9,3,5,1,50] print(a) select_sort(a) print(a)