简单算法学习--选择排序

Posted by Wings on 2021-12-05

学习内容

数组、连标;选择排序

数组和链表

数组意味着所有数据在内存中是相连的。
链表中的元素则是可以存在内存中任意地方,通过指针串联。

在数组中添加/删除数据很麻烦O(n)
创建数组时,系统会申请内存中一串相连的内存。
但是当你需要添加新元素时,如果相连内存空间不够,就需要把整个数组移动。
但是当你需要添加新元素时,数组的后面数据都会被操作移动到后一位。
当然也可以提前申请多个,但是会造成内存浪费。

在链表中添加/删除数据很容易O(1)
链表的构成是由数据和一个指向下一个内存的指针构成。
当需要添加数据时,只需要将指针指向新数据,并且将新数据的下一个指针指向老数据即可。

在数组中查找数据很容易O(1)
因为数组中所有数据都是有地址的(下标)所以查找效率会高

在链表中查找数据很麻烦O(n)
在链表中,想要查询一个中间数据,需要从头部开始根据指针一个个查询,所以查询效率会很低。

题外话:
1、【object】的存储方式?
堆内存,存的都是指向栈内存的指针,所以他的存储位置也是随机的,和链条相同
2、在中间插入,如果是一个要从头循环的“数组”,但是会有中间插入的场景,你会怎么选择:
可以用链表,添加iterator属性。前提是这个“数组”肯定是要从头查询一遍的,所以不存在链表效率低,但是插入效率却提高了。