算法图解(二)选择排序

翻看目录我能想到什么
1.数组 2.链表 3.链表数组 4.选择排序
一。数组
数组是连续的存储,内存必须分配一串连续的内存空间给他。如果没有一串连续的达到要求长度内存地址,就无法分配(基本不可能实现)
数组的访问方法:随机访问和顺序访问。
随机访问: 可以任意访问某一个数组元素
顺序访问: 必须逐个的读取元素
时间复杂度
查找:O(1)
插入:O(n)
删除:O(n)
二。链表
链表是不连续的存储。可以任意分配内存地址,但是第n个存储空间必须存储第n+1个存储空间的地址。
链表只支持顺序访问,只有访问了前一个才能获取下一个的内存地址
时间复杂度
查找:O(n)
插入:O(1)
删除:O(1)
三。链表数组
例如按照首字母存储庞大用户量的用户名
用数组存储首字母A-Z,每个数组元素指向一个链表,去存储用户名
四。选择排序
时间复杂度O(n**2)
第一次在n个中寻找最小的,第二个在(n-1)个中寻找最小的···,
(n+1)*n*(1/2) 所以时间复杂度为O((n+1)*n*(1/2))=O(n**2)
最常见的排序,不断遍历整个数组寻找最小的数据,存储到另外一个新的数组中,最后输出新的数组。

  1. 写一个比较函数,找到最小值的索引号存储到数组中。
  2. 主函数中使用for循环,不停的将“最小值”加入新的数组

翻翻书看看遗漏了什么
链表数组的查找速度与插入速度与链表和数组的快慢
快->慢
查找 数组->链表数组->链表
插入 链表≈链表数组->数组

代码实现

def past(list) :
    smallest = list[0]
    arry_index = 0
    for i in range(1,len(list)) :  #这个记录了位置
        if list[i] < smallest :
            smallest = list[i]
            arry_index = i
    return arry_index
def select(list) :
    new_arry = []
    for i in range(len(list)) :   #i在这里仅仅作为循环次数,不具有其他意义
        smallest = past(list)
        new_arry.append(list.pop(smallest)) #  不停的把list元素弹出。
    return new_arry
list = [5,3,6,2,10]
print(select(list))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值