本章内容
两种最基本数据结构——数组与链表。以及优缺点。
学习简单的选择排序算法。
小结
计算机内存犹如大抽屉。
需要存储多个元素时,采用数组或链表。
数组的元素都在一起。
链表的元素分开,其中每个元素都存储了下一个元素的地址。
数组的读取速度很快。
链表的插入和删除速度很快。
在同一个数组中,所有元素的类型都必须相同。
2.1 内存的工作原理
看电影
寄存
电影座位
数组 : 预定5个连座。插入不方便,遍历方便 
链表 : 5人分开坐。插入方便,遍历不方便。
| 数组 | 链表 | |
|---|---|---|
| 读取 | O(1) | O(n) | 
| 插入 | O(n) | O(1) | 
| 删除 | O(n) | O(1) | 
数组支持随机访问
python实现
def
# 先编写一个用于找出数组中最小值的函数def findSmallest(arr):smallest = arr[0]smallest_index = 0for i in range(1,len(arr)):if arr[i] < smallest:smallest = arr[i]smallest_index = ireturn smallest_index# 简单选择排序def selectionSort(arr):newArr = []for i in range(len(arr)):smallest_index = findSmallest(arr)newArr.append(arr.pop(smallest_index)) //弹出已排序元素,并将其入栈新数组return newArr
call

C实现
def
// 两元素交换void swap(int *a,int *b){int tmp;tmp = *a;*a = *b;*b = tmp;}// 选择排序void selection_sort(int arr[],int len){int i,j,small_index;for(i=0;i<len-1;i++){//其实,这里i也可以取到len-1,因为,嵌套中的j=len虽然越界,但是还有j<len的循环条件。small_index = i;for(j=i+1;j<len;j++){if(arr[j] < arr[small_index])small_index = j; //记录最小元素所在索引}swap(&arr[i],&arr[small_index]);}}
call
#include<stdio.h>#include "..\love\selection_sort.h"int main(){int arr[5] = {4,3,1,5,8};int len=5,i;selection_sort(arr,len);for(i=0;i<len;i++)printf("%d ",arr[i]);return 0;}
