Podcast
Questions and Answers
在需要读取链表中的最后一个元素时,为什么不能直接读取?
在需要读取链表中的最后一个元素时,为什么不能直接读取?
- 最后一个元素没有存储任何数据。
- 链表的最后一个元素总是被其他程序占用。
- 最后一个元素的地址是保密的。
- 链表不支持随机访问, 必须从头开始遍历。 (correct)
在内存中存储一系列元素时,数组和链表的主要区别是什么?
在内存中存储一系列元素时,数组和链表的主要区别是什么?
- 数组的长度是固定的, 而链表的长度可以动态改变。
- 数组只能存储整数, 而链表可以存储任何类型的数据。
- 数组中的元素在内存中必须相邻, 而链表则不需要。 (correct)
- 数组的访问速度比链表慢。
如果一个排序算法的时间复杂度是$O(n^2)$,这意味着什么?
如果一个排序算法的时间复杂度是$O(n^2)$,这意味着什么?
- 算法的运行时间与输入数据大小的对数成正比。
- 算法的运行时间与输入数据大小成正比。
- 算法的运行时间与输入数据大小的平方成正比。 (correct)
- 算法的运行时间与输入数据的大小无关。
为什么要对数据进行排序后才使用二分查找?
为什么要对数据进行排序后才使用二分查找?
如果你的朋友想在数组的开头插入一个元素,这会导致什么问题?
如果你的朋友想在数组的开头插入一个元素,这会导致什么问题?
在链表中插入一个元素比在数组中插入一个元素有什么优势?
在链表中插入一个元素比在数组中插入一个元素有什么优势?
选择排序的基本思想是什么?
选择排序的基本思想是什么?
如果你的系统内存中有足够的空间,但程序却无法为数组分配所需的连续内存,可能是什么原因?
如果你的系统内存中有足够的空间,但程序却无法为数组分配所需的连续内存,可能是什么原因?
下列关于大O表示法,哪个描述是正确的?
下列关于大O表示法,哪个描述是正确的?
在现实场景中,什么时候应该使用链表而不是数组?
在现实场景中,什么时候应该使用链表而不是数组?
以下哪个操作在数组中比在链表中效率更高?
以下哪个操作在数组中比在链表中效率更高?
如果使用选择排序算法对一个已经排序好的数组进行排序,算法的运行时间会如何?
如果使用选择排序算法对一个已经排序好的数组进行排序,算法的运行时间会如何?
在什么情况下,预留座位(即预先分配比当前需要更多的内存空间)是一种合理的权变措施?
在什么情况下,预留座位(即预先分配比当前需要更多的内存空间)是一种合理的权变措施?
以下哪种数据结构最适合实现一个后进先出(LIFO)的栈?
以下哪种数据结构最适合实现一个后进先出(LIFO)的栈?
下列关于混合数据结构(如链表数组)的描述,哪个是正确的?
下列关于混合数据结构(如链表数组)的描述,哪个是正确的?
你如何评估为特定问题选择哪种数据结构或算法?
你如何评估为特定问题选择哪种数据结构或算法?
假设有一个包含1000个元素的数组,你希望在其中间位置插入一个新元素,大约需要移动多少个元素?
假设有一个包含1000个元素的数组,你希望在其中间位置插入一个新元素,大约需要移动多少个元素?
当你需要在排序算法的运行时间和内存使用之间做出权衡时,哪种排序算法可能是最好的选择?
当你需要在排序算法的运行时间和内存使用之间做出权衡时,哪种排序算法可能是最好的选择?
下列哪种情况不适合使用数组?
下列哪种情况不适合使用数组?
如果需要频繁地合并两个有序列表,哪种数据结构更适合?
如果需要频繁地合并两个有序列表,哪种数据结构更适合?
Flashcards
内存单元的地址
内存单元的地址
内存中的一个位置,可存储数据。
数组
数组
所有元素在内存中都是相连的。
链表
链表
元素可存储在内存的任何地方,每个元素都存储下一个元素的地址。
数组:随机访问
数组:随机访问
Signup and view all the flashcards
链表:顺序访问
链表:顺序访问
Signup and view all the flashcards
顺序访问
顺序访问
Signup and view all the flashcards
随机访问
随机访问
Signup and view all the flashcards
索引
索引
Signup and view all the flashcards
选择排序
选择排序
Signup and view all the flashcards
findSmallest
findSmallest
Signup and view all the flashcards
Study Notes
第二章:选择排序
- 本章学习数组与链表两种基础数据结构,以及排序算法。
- 了解它们的优缺点,可针对不同算法选择合适的数据结构。
- 选择排序是快速排序的基石,理解选择排序有助于理解快速排序。
知识储备
- 需要理解大O表示法和对数,相关知识在第一章。
2.1 内存的工作原理
- 计算机内存类似于有很多抽屉的柜子,每个抽屉都有地址。
- 存储数据时,计算机会提供一个存储地址。
2.2 数组和链表
- 数组和链表是存储多项数据的两种基本方式。
- 数组:
- 数组内的元素在内存中是相连的。
- 数组添加新元素很慢,因为可能需要移动到其他内存。
- 一种解决办法是“预留座位”,但存在浪费内存,以及预留座位不够用的缺点。
- 链表:
- 链表中的元素可存储在内存的任何地方。
- 链表的每个元素都存储了下一个元素的地址。
- 不需要移动元素,但是要从头开始查找。
2.2.2 数组
- 链表的优势在插入元素方面,数组的优势是可以跳跃读取,速度快。知道其中每个元素的地址,例如,假设有一个数组,它包含五个元素,起始地址为00,那么元素#5的地址是04。只需执行简单的数学运算就知道:04。
2.2.3 术语
- 数组元素带编号,从0开始,元素的位置称为索引。
- 数组读取速度快,链表插入/删除速度快。
2.2.4 在中间插入
- 链表插入元素很简单,只需修改它前面的那个元素指向的地址,而使用数组时,则必须将后面的元素都向后移。
2.2.5 删除
- 删除元素:链表只需修改前一个元素指向的地址。数组则必须将后边的元素都向前移。
2.3 选择排序
- 选择排序:遍历列表,找出最大(或最小)的元素,将其添加到新列表中。
- 简单排序使用了n次,每次都检查列表中的每个元素,所需时间为O(n)。
- 找出最大或最小的元素的时间为O(n)。
- 选择排序的总时间为O(n*n),即O(n²)。
需要检查的元素数越来越少
- 每次需要检查的元素数逐渐减少,平均每次检查的元素数为 1/2 * n。
- 运行时间实际上是 O(n × 1/2 × n),但大O表示法省略常数,因此还是 O(n²)。
- 更快的排序算法是快速排序,运行时间为O(n log n)。
2.4 小结
- 计算机内存犹如一大堆抽屉,每个位置都有它的地址。
- 需要存储多个元素时,可使用数组和链表。
- 数组的所有元素都在一起。
- 链表的元素是分开的,其中每个元素都存储了下一个元素的地址。
- 数组的读取速度很快。
- 链表的插入和删除速度很快。
- 在同一个数组中,所有元素的类型都必须相同(都为int、double等)。
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.