前言:程序员
今天是第二篇 学习两种数据结构 --- 数组、链表算法
在这以前你必须明白什么是大O表示法和对数 后面的算法也都会使用大O表示法编程
根据条件选择合适的排序 数组和链表各有优缺点 排序是一种重要的算法数组
数组是快速查找的基石 二分查找就是基于数组排序数据结构
链表修改速度快 若是有其余算法排理解起来会更容易app
选择算法:编程语言
内存的工做原理:学习
须要储存多项数据时有两种基本方式 链表、数组 但他们并不是都适用于全部情形spa
所以知道他们的差异很重要code
数组和链表:
就比如你跟朋友去看电影,找到地方坐下后又来一位朋友,但原来坐的地方没位置了
你须要从新找一个能够容纳四我的的地方 全部人都会移到哪里去
若是又来一位就须要从新找地方
就比如内存空间 有一种作法是提早预留空间这种作法并很差
链表:
链表中的元素可用存放在内存的任何地方
每一个元素都存储了下一元素的地址 从而使一些随机的内存串在一块儿
使用链表时 根本不须要移动元素 好比说6我的一块儿看电影 没有连座
这里用上网更合适 网吧打LOL 五连坐 对吧 若是没有五连坐 那咱们只好分开来坐
所以只要有足够的内存空间就能够为链表分配内存
链表的每个元素记录下一个元素地址 索引你在读取时必须读取到当前元素才能
获取下一个元素的地址
数组:
数组每一个元素都有其地址
如图一个数组内有5个元素你只要知道其中一个就能够简单推算出其他数组的位置
数组是从0开始的 几乎全部的编程语言的整数都是从0开始的
链表特色:
数组特色:
O(n)表明遍历每个元素一次
有了前面的知识你在选择排序时就能选择适当的储存方式就能够快速高效的排序
选择排序时一种灵巧的算法,其速度不是很快 快速排序是一种更快的排序算法
其运行时间为 O(n log n) 后面讲.....
小结:
def FindSmallest(arr): smallest = arr[0] # 存储最小的值 smallest_index = 0 #存储最小元素的索引 for x in range(1, len(arr)): if arr[x] < smallest: smallest = arr[x] smallest_index = x return smallest_index def SelectionSort(arr): # 对数值进行排序 newarr = [] for x in range(len(arr)): smallest = FindSmallest(arr) # 找出数组中最小的元素 newarr.append(arr.pop(smallest)) # 将其加入到新的列表 return newarr print(SelectionSort([3, 54, 7, 65, 12, 54, 5]))