一、概念及原理
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。
二、分析以及实现
简单来说,序列循环找出最大或者最小值放在序列前面。其实和冒泡有一点点像,每次循环找出循环序列的最值放在最右边完成排序。
用升序举例:
1.用变量min_num做最小值记录,初始值设为序列第一个
2.在右边序列循环找出最小值并与min_num交换
3.与未排序的首元素交换
4.重新将min_num定在未排序序列第一位
for i in range(len(alist)-1): # i: 0 ~ n-2
min_num = alist[i] # 每次循环结束后的最小值要重新定在未排序序列第一位的第一位
for j in range(i+1, len(alist)):
if alist[j] < min_num:
alist[j], min_num = min_num, alist[j]
alist[i], min_num = min_num, alist[i]
return alist
完整代码:
def select_sort(alist):
count = 0
for i in range(len(alist)-1): # i: 0 ~ n-2
min_num = alist[i] # 每次循环结束后的最小值要重新定在右边列表的第一位
for j in range(i+1, len(alist)):
if alist[j] < min_num:
alist[j], min_num = min_num, alist[j]
count += 1
alist[i], min_num = min_num, alist[i]
return alist,count
def main():
alist = [2,5,7,9,4,1,5,7,3,5,86,45,221,10]
print(select_sort(alist))
listA = [2,5,8,4,9,5,1,4]
print(select_sort(listA))
if __name__ == '__main__':
main()
与冒泡排序比较,发现他们比较次数一样,选择排序具体会受实际待排序序列影响较大
网友评论