数据结构与算法——自底向上(1)随机访问与排序算法

本文探讨了数据结构中的两种基本存储方式——连续存储和非连续存储,重点介绍了数组作为连续存储方式如何支持随机访问,并讨论由此衍生的排序算法。此外,还讲解了链表作为非连续存储方式的应用,特别是链表的归并排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两种基本的数据存储方式:

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 - 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值