python算法---选择排序

计算机存储数据的原理:

众所周知,我们内存的工作原理就像我们逛商场时的存物柜,每个柜子只能放进一个物品,你有两样物品要存,将物品存进(放进)柜子里后,你就可以去逛商场了!计算机就是多个柜子的集合,每个单独的柜子都有自己的地址
而当我们需要存多个数据的时候,我们有两种基本方式----数组和链表

数组:

我们还是拿我们的日常生活举个栗子,你和你的三个好朋友一起去看电影,你们坐在一起是不是就得先保证有四个连在一起的座位,然后你又来了一个好朋友,但是两边并没有空位了,我们就得再找到五个连在一起的座位,或者让旁边的陌生人向旁边挪一挪,这样就比较麻烦,我们也可以提前进行占座,我们先趁没人占上10个座位(虽然这样不道德,我们暂且不管),只要我们来的人不超过10个人,我们就可以直接做到这里,但是如果超过10个人,我们还得再重新找座位.
从上边的案例中,我们可以总结出数组的几个优缺点:
1.内存空间占用的少
2.因为我们的数据都是连着的,所以查找速度就很快
3.插入和删除的速度比较慢,当我们在中间插入新的数据的时候,新元素之后的数据都得向后移动,删除也是同理(只不过是向前移)
4.内存地址的利用率方面,不管你内存里还有多少空间,如果没办法一次性给出数组所需的要空间,那就会提示内存不足
5.若所留的空间占满了就无法再进行扩展

链表:

链表中的元素可以存在任何的位置,链表中的每个元素都存储了下一个元素的地址,就像我们平时玩的解密游戏,第一个线索会提示下一个线索的位置,第二个会提示第三个的位置.
我们还是拿上面的栗子来说,链表相比于数组就像是我们在选座位的时候,我们分开来做,因此只要有足够的内存空间(座位),就能不断的为链表进行分配

数组和链表的优缺点:

数组:
优点:使用方便 ,查询效率 比链表高,内存为一连续的区域
缺点:大小固定,不适合动态存储,不方便动态添加
链表:
优点:可动态添加删除 大小可变
缺点:只能通过顺次指针访问,查询效率低

选择排序:

案例:我们平时听的歌都会记录我们平时听的每首歌的次数,我们想将歌单里的歌按照听歌的次数由多到少进行排序

def kuaisubijiao(list):
    num = list[0]
    num_index = 0
    for i in range(1, len(list)):
        if num > list[i]:       # 通过比较得到最小的数字的下标索引
            num = list[i]
            num_index = i
    return num_index


def kuaisupaixu(list):
    new_list = []
    for i in range(1, len(list)):
        num = kuaisubijiao(list)
        new_list.append(list.pop(num))
    return new_list


print(kuaisupaixu([5, 9, 25, 4, 1, 3, 8]))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值