两种基本的数据存储方式:
1. 连续存储2. 非连续存储
数据的各种存储方式的意义在于支持增删查改
连续存储的特点:
连续的存储方式让存储地址之间存在关联,这种关联支持了——随机访问(random access)这样的操作。缺点是每次存储数据都需要占据一整段连续的存储空间,会造成内存空间的浪费。
非连续存储的特点:
不需要提前占据整段的存储空间,可以充分利用内存。需要使用指针来将相关的存储数据进行串联。
两种基本的数据存储方式的特点就引出了数据结构与算法最根本的两个概念——时间与空间
所以为什么时空复杂度分析在数据结构与算法中尤为重要,因为时间与空间的协调与转换是数据存储与操作时需要考虑的最根本的问题。使用连续存储方式的数据结构:数组
定义:数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。其中连续内存空间且相同数据类型,让数组能够完全发挥连续存储方式的一大优点,就是随机访问。在增删查改的维度来总结数组的特点的话就是:增删低效(O(n)时间复杂度),查询高效(O(1)时间复杂度)。
紧接着随机访问这一大特点,我想继续聊一下根据这一特性延伸出来的排序算法
先以最简单的冒泡排序为例,该排序算法的基本思想就是逐个两两比较然后通过交换index来移动元素,我们直接来看代码。// 冒泡排序,a表示数组,n表示数组大小
public void bubbleSort(int[] a, int n) {
if (n <= 1) return;
for (int i = 0; i < n; ++i) {
// 提前退出冒泡循环的标志位
boolean flag = false;
for (int j = 0; j < n - i -