翻看目录我能想到什么
1.数组 2.链表 3.链表数组 4.选择排序
一。数组
数组是连续的存储,内存必须分配一串连续的内存空间给他。如果没有一串连续的达到要求长度内存地址,就无法分配(基本不可能实现)
数组的访问方法:随机访问和顺序访问。
随机访问: 可以任意访问某一个数组元素
顺序访问: 必须逐个的读取元素
时间复杂度
查找:O(1)
插入:O(n)
删除:O(n)
二。链表
链表是不连续的存储。可以任意分配内存地址,但是第n个存储空间必须存储第n+1个存储空间的地址。
链表只支持顺序访问,只有访问了前一个才能获取下一个的内存地址
时间复杂度
查找:O(n)
插入:O(1)
删除:O(1)
三。链表数组
例如按照首字母存储庞大用户量的用户名
用数组存储首字母A-Z,每个数组元素指向一个链表,去存储用户名
四。选择排序
时间复杂度O(n**2)
第一次在n个中寻找最小的,第二个在(n-1)个中寻找最小的···,
(n+1)*n*(1/2) 所以时间复杂度为O((n+1)*n*(1/2))=O(n**2)
最常见的排序,不断遍历整个数组寻找最小的数据,存储到另外一个新的数组中,最后输出新的数组。
- 写一个比较函数,找到最小值的索引号存储到数组中。
- 主函数中使用for循环,不停的将“最小值”加入新的数组
翻翻书看看遗漏了什么
链表数组的查找速度与插入速度与链表和数组的快慢
快->慢
查找 数组->链表数组->链表
插入 链表≈链表数组->数组
代码实现
def past(list) :
smallest = list[0]
arry_index = 0
for i in range(1,len(list)) : #这个记录了位置
if list[i] < smallest :
smallest = list[i]
arry_index = i
return arry_index
def select(list) :
new_arry = []
for i in range(len(list)) : #i在这里仅仅作为循环次数,不具有其他意义
smallest = past(list)
new_arry.append(list.pop(smallest)) # 不停的把list元素弹出。
return new_arry
list = [5,3,6,2,10]
print(select(list))