章节内容
- 学习两种最基本的数据结构:数组和链表
- 学习一种排序算法:选择排序
内存的工作原理
在学习数组和链表之前我们需要先了解计算机内存的工作原理,这有助于我们区分这两种数据结构的本质区别,也能更深刻的体会它们的优劣。
计算机内存的工作原理就像是我们用于寄存东西的抽屉的集合,每个抽屉都有自己的地址。
数组与链表
数组在计算机内存中都是相连的,也就是数组每个元素的地址是连续的。
链表不同于数组,链表中的元素可存储在内存中的任何地方。链表的每个元素都存储了下一个元素的地址,从而使一列表随机的内存地址串在一起。
链表的优势:
- 插入元素
- 删除元素
数组的优势: - 支持随机的读取元素
选择排序
算法思路:
- 遍历位置0到N的元素,找出最大/最小的元素
- 将找到的最大或最小元素与位置0的元素互换
- 遍历位置1到N的元素,重复第1和2的步骤,直至最后一个元素
算法操作次数=n+(n-1)+(n-2)+.....1=n*n/2
所以时间复杂度为O(n^2)
示例代码:
def findSmallest(arr):
smallest = arr[0]
smallest_index = 0
for i in range(1, len(arr))
if arr[i] < smallest:
smallest = arr[i]
smallest_index = i
return smallest_index
def selectionSort(arr):
newArr = []
for i in range(len(arr)):
smallest = findSmallest(arr)
newArr.append(arr.pop(smallest))
return newArr
print selectionSort([5, 3, 6, 2, 10])
小结
- 计算机内存犹如一大堆抽屉
- 需要存储多个元素时,可使用数组或链表
- 数组的元素都在一起
- 链表的元素是分开的,其中每个元素都存储了下一个元素的地址
- 数组的读取速度很快
- 链表的插入和删除速度很快
- 在同一数组中,所有元素的类型都必须相同。