算法图解读书笔记 第2章 选择排序

选择排序

2.1 内存的工作原理
将看演出时抽屉存放物品,每个抽屉可存放一个物品,看作是计算机内存的工作原理。

2.2 数组和链表
数组新加数据时需要重新申请内存,很麻烦。还有一种方法,是“预留座位”,但这样就造成了浪费,而且超出预留位还得转移。
2.2.1 链表
链表中的元素可存放在内存的任何位置,链表的每一个元素都存储了下一个元素的地址,从而是一系列随机的内存地址串在一起。在链表中添加元素很容易:只需将其放入内存,并将其地址存放到前一个元素中。链表的优势在插入元素方面。
2.2.2 数组
说数组前,先说下链表的缺点。在读取链表最后一个元素时(举例为查看排行榜),你不能直接读取,因为你不知道他所处的地址必须访问元素#1,从而获取#2的地址,再访问元素#2从中获取#3的地址,以此类推,直到访问最后一个元素。
需要随机的访问元素时数组的效率很高,因为他每个地址都是确定的(比如有5个元素的数组,其实地址为00,那么元素#5的地址为04)。
2.2.3 术语
数组元素带编号,编号从0而不是从1开始。
在这里插入图片描述
元素的位置成为索引,因此,不说“元素20位置为1处“,而说“元素20位于索引1处”
2.2.4 在中间插入
链表比较简单,只需要修改它前面那个元素指向的地址就可以。数组比较复杂,需要后面的元素向后移,如果内存不足还需要申请内存,将整个数组复制到其他地方。
2.2.5 删除
删除元素时,链表也有更好的选择,因为只需要修改前一个元素指向的地址就可以。而使用数组时,删除元素时,必须将后面的元素向前移动。

2.3 选择排序
例子,假设你的计算机存取了很多乐曲,每首乐曲都记录了播放次数,将这个链表按播放次数从多到少排序,该怎么做呢?
①遍历整个链表,找出播放次数最多的乐曲,添加到一个新列表中。再这样做找出第二多的乐曲。继续,你将得到一个有序数列。(时间复杂度为O(n方))

2.4 小结
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值