算法图解(二)
翻看目录我能想到什么 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循环,不停的将“最小值”加入新的数组 翻翻书看看遗漏了什么 链表数组的查找速度与插入速度与链表和数组的快慢 快->慢