Python3 数据结构与算法之选择排序

本文详细介绍了选择排序算法的基本思想、时间复杂度以及稳定性,并通过具体的Python代码实现帮助读者更好地理解和掌握选择排序的过程。

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

选择排序

基本思想:选择排序是一种简单直观的排序算法。它的工作原理首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序的时间复杂度问题

  • 最优时间复杂度:O(n2)
  • 最坏时间复杂度:O(n2)
  • 稳定性:不稳定(考虑升序每次选择最大的情况)
对考虑升序的情况进行说明:将两个相同数据用(1)(2)进行区分
有一列表[45(2),23,77,45(1),56]
如果我们选择最大的数据放置末尾
第一次:[45(2),23,45(1),56,77]
第二次:[45(2),23,45(1),56,77]  #我们是从一个列表的头部进行寻找所以(2)的优先级高于(1)
第三次:[23,45(1),45(2),56,77
第四次:[23,45(1),45(2),56,77
由上诉过程可以看出(2)的位置在排序完后和(1)发生了交换,所以我们说他不稳定

Python代码的实现(将小数提前)
def select_sort(alist):
    n = len(alist)
    for j in range(n - 1):
        min_index = j
        for i in range(j + 1, n):
            if alist[min_index] > alist[i]:
                min_index = i
        alist[j], alist[min_index] = alist[min_index], alist[j]


li = [99, 22, 64, 55, 11, 35, 89, 1, 2]
select_sort(li)
print(li)

(将大数坠后)

def select_sort(alist):
    n = len(alist)
    count = 1
    for j in range(n - 1):
        max_index = 0
        for i in range(1, n - j):
            if alist[max_index] < alist[i]:
                max_index = i
        alist[max_index], alist[n - count] = alist[n - count], alist[max_index]
        count += 1


li = [99, 22, 64, 55, 11, 35, 89, 1, 2]
select_sort(li)
print(li)

选择排序的动态理解


数据结构算法Python) 一、引入概念 1-01算法引入 1-02 时间复杂度大O表示法 1-03-最坏时间复杂度计算规则 1-04-常见时间复杂度大小关系 1-05-代码执行时间测量模块 1-06-Python列表类型不同操作的时间效率 1-07-Python列表字典操作的时间复杂度 1-08-数据结构引入 二、顺序表 2-01 内存、类型本质、连续存储 recv 2-02 基本顺序表元素外围顺序表 recv 2-03 顺序表的一体式结构分离式结构 recv 2-04 顺序表数据区替换扩充 recv 三、栈 3-01 栈队列的概念 3-02 栈的实现 3-03 队列双端队列的实现 四、链表 4-01 链表的提出 4-02 单链表的ADT模型 4-03 Python中变量标识的本质 4-04 单链表及结点的定义代码 4-05 单链表的判空、长度、遍历尾部添加结点的代码实现 4-06 单链表尾部添加和在指定位置添加 4-07 单链表查找和删除元素 4-08 单链表顺序表的对比 4-09 单向循环链表遍历和求长度 4-10 单向循环链表添加元素 4-11 单向循环链表删除元素 4-12 单向循环链表删除元素复习及链表扩展 4-13 双向链表及添加元素 4-14 双向链表删除元素 五、排序搜索 5-01 排序算法的稳定性 5-02 冒泡排序实现 5-03 选择排序算法实现 5-04 插入算法 5-05 插入排序 5-06 插入排序2 5-07 希尔排序 5-08 希尔排序实现 5-09 快速排序 5-10 快速排序实现1 (1) 5-10 快速排序实现1 5-11 快速排序实现2 5-12 归并排序 5-13 归并排序 代码执行流程 5-14 归并排序时间复杂度及排序算法复杂度对比 5-15 二分查找 5-16 二分查找时间复杂度 六、树和树的算法 6-01 树的概念 6-02 二叉树的概念 6-03 二叉树的广度优先遍历 6-04 二叉树的实现 6-05 二叉树的先序、中序、后序遍历 6-06 二叉树由遍历确定一棵树 ———————————————— 版权声明:本文为优快云博主「dwf1354046363」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.youkuaiyun.com/dwf1354046363/article/details/119832814
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

二哥不像程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值