算法之旅----选择排序
选择排序
内存的工作原理
把内存比喻成一个寄存处的一个柜子,柜子有很多抽屉,每个抽屉可放一样东西,你有两样东西要寄存,因此要了两个抽屉。
你将两样东西存放在这里,这就是大致的计算机内存的工作原理,计算机就像是很多抽屉的集合体,每个抽屉都有地址。
需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。
需要存多项数据时,有两种基本方式——数组和链表。
数组和链表
有时候,需要在内存中储存一系列元素。
应该是使用数组还是链表呢?
数组的元素带编号,编号从0开始而不是从1开始。
对于访问,数组在物理内存上是连续存储的,硬件上支持“随机访问”
链表没有下标的概念,只能通过头节点指针,从每一个节点,依次往下找,因为下个节点的位置信息只能通过上个节点知晓
对于增加,因为数组在内存中是连续存储的,要想在某个节点之前增加,且保持增加后数组的线性与完整性,必须要把此节点往后的元素依次后移。
而链表却为其他元素着想多了。由上图可知,链表中只需要改变节点中的“指针”,就可以实现增加。自身在内存中所占据的位置不变,只是这个节点所占据的这块内存中数据(指针)改变了,相对于数组“牵一发而动全身”的大动作,链表则要显示温和的多,局部数据改写就可以了。
选择排序
选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。
算法步骤
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
代码实现
1 | public class SelectionSort implements IArraySort { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 FS的小站!