2选择排序

1. 内存的工作远离

假设你去超市,需要将东西寄存到柜子。你有2个包需要寄存,因此要了2个格子去存放。
计算机就像是许多格子的集合体,每个格子都有地址。
需要将数据存储到内存时,用户请求计算机提供存储空间,计算机给用户一个存储地址。需要存储多项数据时,有两种基本方式——数组和链表。但它们并非都适用于所有的情形,因此知道它们的差别很重要。

2. 数组和链表

数组意味着所有待办事项在内存种都是相连的(紧靠在一起)。
比如一个数组,有3个成员变量(大众、丰田、本田)。
要添加第4个待办事项,但后面的那个格子存放这别人的东西。在这种情况下,你需要请求计算机重新分配一块可容纳4个待办事项的内存,再将所有待办事项都移到那里。
解决方法:即便当前只有3个待办事项,也请计算机提供10个位置,以便需要添加待办事项。它存在如下两个缺点:

  • 你额外请求的位置可能根本用不上,这将浪费内存。你没有使用,别人也用不了
  • 待办事项超过10个后,你还得转移。

因此,这种权宜之计虽然不错,但绝非完美的解决方案。对于这种问题,可使用链表来解决。

2.1 链表

链表中的元素可存储在内存的任何地方。链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。插入元素时,根本就不需要移动元素。只要有足够的内存空间,就能为链表分配内存。

2.2 数组

在读取链表的最后一个元素时,你不能直接读取,因为不知道它所处的地址,必须先访问第1个元素,获取第2个元素的地址;再访问第2个元素,获取第3个元素的地址...直到最后一个。需要读取所有元素时,链表的效率很高;如果需要跳跃访问,链表的效率很低。
数组根据索引去获取元素。因此需要随机的读取元素时,数组的效率很高,因为可迅速找到数组的任何元素。

2.3 在中间插入

猜你喜欢

转载自www.cnblogs.com/csj2018/p/12046357.html