用Python实现基本排序算法02——选择排序

15 篇文章 0 订阅
12 篇文章 0 订阅

一、选择排序的核心思想

(以从小到大排序为例,假设共计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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值