1.什么是简单选择排序
简单选择排序是一种选择排序。
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,所以称为:选择排序
算法思想:
1,从待排序序列中,找到关键字最小的元素;
2,如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;
3,从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。
黄色表示位置发生变化的元素。
每趟排序中,将当前第 i 小的元素放在位置 i 上。
2. python3代码实现:
# -*- coding: utf-8 -*-
"""
Created on Tue Jul 9 17:42:50 2019
@author: ZQQ
"""
def selectionSort(input_list):
'''
函数说明:
'''
length = len(input_list)
if length == 0 :
return []
else:
# 第一层循环表示选择的遍数
for i in range(length - 1): # 共需要n-1次选择
# 假设起始元素设为最小元素
min_index = i
# 第二层for表示最小元素和后面元素逐个比较
for j in range(i + 1, length):
if input_list[min_index] > input_list[j]:
min_index = j
# 查找一遍后将最小元素与起始元素互换
# 将找到的第i个小的数值放在第i个位置上
temp = input_list[i]
input_list[i] = input_list[min_index]
input_list[min_index] = temp
print(input_list) # 查看状态
#input_list[min_index],input_list[i] = input_list[i],input_list[min_index]
return input_list
input_list = [5,4,1,3,2]
print('排序前:',input_list)
sorted_list = selectionSort(input_list)
print('排序后:',sorted_list)
实验结果:
3.算法分析
选择排序和冒泡排序很类似,但是选择排序每轮比较只会有一次交换,而冒泡排序会有多次交换,交换次数比冒泡排序少,就减少cpu的消耗,所以在数据量小的时候可以用选择排序,实际适用的场合非常少。
(1)排序类别:选择排序
(2)稳定性:不稳定,数据之间相对位置发生改变
(3)复杂性:简单
(4)时间复杂度:我们看到选择排序同样是双层循环n*(n-1)),所以时间复杂度也为:O(n^2)
平均/最坏/最好情况:O(N^2)
(5)空间复杂度:只需要常数个辅助单元,所以空间复杂度为O(1)【简单选择排序需要占用 1 个临时空间,在交换数值时使用。】
参考和引用:
https://www.cnblogs.com/pig66/p/10598141.html
https://www.cnblogs.com/jingmoxukong/p/4303289.html
https://cuijiahua.com/blog/2017/12/algorithm_5.html
如有侵权,留言立删。