数据结构:Python实现简单选择排序(3)

本文介绍了简单选择排序算法,它是一种选择排序,工作原理是每次从待排序数据中选最小元素放起始位置。给出了算法思想,用Python3实现并展示结果。还分析了算法,指出其交换次数少,数据量小时适用,时间复杂度为O(n^2),空间复杂度为O(1)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

如有侵权,留言立删。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器不学习我学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值