一、选择排序的核心思想
(以从小到大排序为例,假设共计N个元素)
冒泡排序在每次发现左边的值更大之后,都会进行一次交换。(详见:http://blog.csdn.net/pospro/article/details/47984469)
而选择排序则是首先遍历一遍,找到最大的值的坐标之后,再将该值与适当位置相交换。“选择”最大值出现的位置,应该就是选择排序得名的原因吧
思路:
计划按从小到达排列,即最大的值要放到最右边
1. 遍历全部元素,找到最大值所在位置,若最大值不在最右侧(即[N-1]),则将该位置的数与[N-1]交换
2. 遍历元素0~N-2,找到最大值所在位置,并将其交换至[N-2]
...
N-1 遍历元素0~1,找到最大元素,并确保其出位置1处
二、程序实例
def selectionSort(alist):
n=len(alist)
for i in range(n,1,-1): # i=(n,n-1,n-2.....2)
maxpos=0
for j in range(i): #j=(0,1,2,....i-1)
if alist[maxpos]<alist[j]:
maxpos=j
if not maxpos==i-1: # 若最大的数不在未排序数的最后一个,则进行交换
alist[maxpos],alist[i-1]=alist[i-1],alist[maxpos]
#print alist
三、测试
如果有兴趣,可以把程序中print语句前面的#去掉,运行下面的测试程序(测试程序见http://blog.csdn.net/pospro/article/details/47984469)