Skip to content

Commit

Permalink
更新 01. 数组 相关图片、图片标题
Browse files Browse the repository at this point in the history
  • Loading branch information
itcharge committed May 9, 2024
1 parent 24fb09a commit 50623e1
Show file tree
Hide file tree
Showing 14 changed files with 45 additions and 50 deletions.
12 changes: 2 additions & 10 deletions Contents/01.Array/01.Array-Basic/01.Array-Basic.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

以整数数组为例,数组的存储方式如下图所示。

![数组](https://qcdn.itcharge.cn/images/20210913163542.png)
![数组](https://qcdn.itcharge.cn/images/202405091955166.png)

如上图所示,假设数据元素的个数为 $n$,则数组中的每一个数据元素都有自己的下标索引,下标索引从 $0$ 开始,到 $n - 1$ 结束。数组中的每一个「下标索引」,都有一个与之相对应的「数据元素」。

Expand Down Expand Up @@ -37,7 +37,7 @@

以二维数组为例,数组的形式如下图所示。

![二维数组](https://qcdn.itcharge.cn/images/20210916222435.png)
![二维数组](https://qcdn.itcharge.cn/images/202405091957859.png)

二维数组是一个由 $m$ 行 $n$ 列数据元素构成的特殊结构,其本质上是以数组作为数据元素的数组,即 **「数组的数组」**。二维数组的第一维度表示行,第二维度表示列。

Expand Down Expand Up @@ -235,17 +235,9 @@ print(arr)
## 参考资料

- 【文章】[数据结构中的数组和不同语言中数组的区别 - CSDN 博客](https://blog.csdn.net/sinat_14913533/article/details/102763573)

- 【文章】[数组理论基础 - 代码随想录](https://programmercarl.com/数组理论基础.html#数组理论基础)

- 【文章】[Python 与 Java 中容器对比:List - 知乎](https://zhuanlan.zhihu.com/p/120312437)

- 【文章】[什么是数组 - 漫画算法 - 小灰的算法之旅 - 力扣](https://leetcode.cn/leetbook/read/journey-of-algorithm/5ozchs/)

- 【文章】[数组 - 数据结构与算法之美 - 极客时间](https://time.geekbang.org/column/intro/100017301)

- 【书籍】数据结构教程 第 2 版 - 唐发根 著

- 【书籍】数据结构与算法 Python 语言描述 - 裘宗燕 著


4 changes: 2 additions & 2 deletions Contents/01.Array/02.Array-Sort/01.Array-Bubble-Sort.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@
4. 经过第 $2$ 趟排序,使得数组中第 $2$ 个值最大元素被安置在第 $n$ 个位置上。
3. 依次类推,重复上述「冒泡」过程,直到某一趟排序过程中不出现元素交换位置的动作,则排序结束。

我们以 $[5, 2, 3, 6, 1, 4]$ 为例,演示一下冒泡排序的整个过程
我们以 $[5, 2, 3, 6, 1, 4]$ 为例,演示一下冒泡排序算法的整个步骤

![冒泡排序](http://qcdn.itcharge.cn/images/20230816154510.png)
![冒泡排序算法步骤](https://qcdn.itcharge.cn/images/20230816154510.png)

## 3. 冒泡排序代码实现

Expand Down
16 changes: 8 additions & 8 deletions Contents/01.Array/02.Array-Sort/02.Array-Selection-Sort.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,37 +21,37 @@
3. 此时,$[0, 1]$ 为已排序区间,$[2, n - 1]$(总共 $n - 2$ 个元素)为未排序区间。
4. 依次类推,对剩余未排序区间重复上述选择过程,直到所有元素都划分到已排序区间,排序结束。

我们以 $[5, 2, 3, 6, 1, 4]$ 为例,演示一下选择排序的整个过程
我们以 $[5, 2, 3, 6, 1, 4]$ 为例,演示一下选择排序的整个步骤

::: tabs#selectionSort

@tab <1>

![选择排序 1](http://qcdn.itcharge.cn/images/20230816155042.png)
![选择排序 1](https://qcdn.itcharge.cn/images/20230816155042.png)

@tab <2>

![选择排序 2](http://qcdn.itcharge.cn/images/20230816155017.png)
![选择排序 2](https://qcdn.itcharge.cn/images/20230816155017.png)

@tab <3>

![选择排序 3](http://qcdn.itcharge.cn/images/20230816154955.png)
![选择排序 3](https://qcdn.itcharge.cn/images/20230816154955.png)

@tab <4>

![选择排序 4](http://qcdn.itcharge.cn/images/20230816154924.png)
![选择排序 4](https://qcdn.itcharge.cn/images/20230816154924.png)

@tab <5>

![选择排序 5](http://qcdn.itcharge.cn/images/20230816154859.png)
![选择排序 5](https://qcdn.itcharge.cn/images/20230816154859.png)

@tab <6>

![选择排序 6](http://qcdn.itcharge.cn/images/20230816154836.png)
![选择排序 6](https://qcdn.itcharge.cn/images/20230816154836.png)

@tab <7>

![选择排序 7](http://qcdn.itcharge.cn/images/20230816153324.png)
![选择排序 7](https://qcdn.itcharge.cn/images/20230816153324.png)

:::

Expand Down
4 changes: 2 additions & 2 deletions Contents/01.Array/02.Array-Sort/03.Array-Insertion-Sort.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@
4. 插入元素后有序区间变为 $[0, 2]$,无序区间变为 $[3, n - 1]$。
4. 依次类推,对剩余无序区间中的元素重复上述插入过程,直到所有元素都插入到有序区间中,排序结束。

我们以 $[5, 2, 3, 6, 1, 4]$ 为例,演示一下插入排序的整个过程
我们以 $[5, 2, 3, 6, 1, 4]$ 为例,演示一下插入排序算法的整个步骤

![插入排序](http://qcdn.itcharge.cn/images/20230816175619.png)
![插入排序算法步骤](http://qcdn.itcharge.cn/images/20230816175619.png)

## 3. 插入排序代码实现

Expand Down
2 changes: 1 addition & 1 deletion Contents/01.Array/02.Array-Sort/04.Array-Shell-Sort.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
4. 减少间隔数,并重新将整个数组按新的间隔数分成若干个子数组,再分别对各个子数组进行排序。
5. 依次类推,直到间隔数 $gap$ 值为 $1$,最后进行一次排序,排序结束。

我们以 $[7, 2, 6, 8, 0, 4, 1, 5, 9, 3]$ 为例,演示一下希尔排序的整个过程
我们以 $[7, 2, 6, 8, 0, 4, 1, 5, 9, 3]$ 为例,演示一下希尔排序的整个步骤

::: tabs#shellSort

Expand Down
4 changes: 2 additions & 2 deletions Contents/01.Array/02.Array-Sort/05.Array-Merge-Sort.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
5. 将另一个子数组中的剩余元素存入到结果数组 $nums$ 中。
6. 返回合并后的有序数组 $nums$。

我们以 $[0, 5, 7, 3, 1, 6, 8, 4]$ 为例,演示一下归并排序的整个过程
我们以 $[0, 5, 7, 3, 1, 6, 8, 4]$ 为例,演示一下归并排序算法的整个步骤

![归并排序](http://qcdn.itcharge.cn/images/20230817103814.png)
![归并排序算法步骤](http://qcdn.itcharge.cn/images/20230817103814.png)

## 3. 归并排序代码实现

Expand Down
18 changes: 9 additions & 9 deletions Contents/01.Array/02.Array-Sort/06.Array-Quick-Sort.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,37 +28,37 @@

@tab <1>

![哨兵划分 1](http://qcdn.itcharge.cn/images/20230818175908.png)
![哨兵划分 1](https://qcdn.itcharge.cn/images/20230818175908.png)

@tab <2>

![哨兵划分 2](http://qcdn.itcharge.cn/images/20230818175922.png)
![哨兵划分 2](https://qcdn.itcharge.cn/images/20230818175922.png)

@tab <3>

![哨兵划分 3](http://qcdn.itcharge.cn/images/20230818175952.png)
![哨兵划分 3](https://qcdn.itcharge.cn/images/20230818175952.png)

@tab <4>

![哨兵划分 4](http://qcdn.itcharge.cn/images/20230818180001.png)
![哨兵划分 4](https://qcdn.itcharge.cn/images/20230818180001.png)

@tab <5>

![哨兵划分 5](http://qcdn.itcharge.cn/images/20230818180009.png)
![哨兵划分 5](https://qcdn.itcharge.cn/images/20230818180009.png)

@tab <6>

![哨兵划分 6](http://qcdn.itcharge.cn/images/20230818180019.png)
![哨兵划分 6](https://qcdn.itcharge.cn/images/20230818180019.png)

@tab <7>

![哨兵划分 7](http://qcdn.itcharge.cn/images/20230818180027.png)
![哨兵划分 7](https://qcdn.itcharge.cn/images/20230818180027.png)

:::

在经过一次「哨兵划分」过程之后,数组就被划分为左子数组、基准数、右子树组三个独立部分。接下来只要对划分好的左右子数组分别进行递归排序即可完成排序。整个步骤如下
在经过一次「哨兵划分」过程之后,数组就被划分为左子数组、基准数、右子树组三个独立部分。接下来只要对划分好的左右子数组分别进行递归排序即可完成排序。快速排序算法的整个步骤如下

![快速排序](http://qcdn.itcharge.cn/images/20230818153642.png)
![快速排序算法步骤](https://qcdn.itcharge.cn/images/20230818153642.png)

## 3. 快速排序代码实现

Expand Down
10 changes: 7 additions & 3 deletions Contents/01.Array/02.Array-Sort/07.Array-Heap-Sort.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,13 @@

### 1.2 堆的存储结构

堆的逻辑结构就是一颗完全二叉树。而我们在「07.树 - 01.二叉树 - 01.树与二叉树的基础知识」章节中学过,对于完全二叉树(尤其是满二叉树)来说,采用顺序存储结构(数组)的形式来表示完全二叉树,能够充分利用存储空间。
堆的逻辑结构就是一颗完全二叉树。如下图所示:

![堆的逻辑结构](https://qcdn.itcharge.cn/images/202405092006120.png)

而我们在「07.树 - 01.二叉树 - 01.树与二叉树的基础知识」章节中学过,对于完全二叉树(尤其是满二叉树)来说,采用顺序存储结构(数组)的形式来表示完全二叉树,能够充分利用存储空间。如下图所示:

![使用顺序存储结构(数组)表示堆](https://qcdn.itcharge.cn/images/202405092007823.png)

当我们使用顺序存储结构(即数组)来表示堆时,堆中元素的节点编号与数组的索引关系为:

Expand All @@ -26,8 +32,6 @@ class MaxHeap:
self.max_heap = []
```

![堆的存储结构](https://qcdn.itcharge.cn/images/20230824154601.png)

### 1.3 访问堆顶元素

> **访问堆顶元素**:指的是从堆结构中获取位于堆顶的元素。
Expand Down
4 changes: 2 additions & 2 deletions Contents/01.Array/02.Array-Sort/08.Array-Counting-Sort.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
1. 将其填充到结果数组 $res$ 的索引 $counts[num - nums\underline{\hspace{0.5em}}min]$ 处。
2. 放入后,令累积计数数组中对应索引减 $1$,从而得到下个元素 $num$ 的放置位置。

我们以 $[3, 0, 4, 2, 5, 1, 3, 1, 4, 5]$ 为例,演示一下计数排序的整个步骤
我们以 $[3, 0, 4, 2, 5, 1, 3, 1, 4, 5]$ 为例,演示一下计数排序算法的整个步骤

![计数排序](https://qcdn.itcharge.cn/images/20230822135634.png)
![计数排序算法步骤](https://qcdn.itcharge.cn/images/20230822135634.png)

## 3. 计数排序代码实现

Expand Down
4 changes: 2 additions & 2 deletions Contents/01.Array/02.Array-Sort/09.Array-Bucket-Sort.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
3. **对每个桶进行排序**:对每个非空桶内的元素单独排序(使用插入排序、归并排序、快排排序等算法)。
4. **合并桶内元素**:将排好序的各个桶中的元素按照区间顺序依次合并起来,形成一个完整的有序数组。

我们以 $[39, 49, 8, 13, 22, 15, 10, 30, 5, 44]$ 为例,演示一下桶排序的整个步骤
我们以 $[39, 49, 8, 13, 22, 15, 10, 30, 5, 44]$ 为例,演示一下桶排序算法的整个步骤

![桶排序](http://qcdn.itcharge.cn/images/20230822153701.png)
![桶排序算法步骤](https://qcdn.itcharge.cn/images/20230822153701.png)

## 3. 桶排序代码实现

Expand Down
4 changes: 2 additions & 2 deletions Contents/01.Array/02.Array-Sort/10.Array-Radix-Sort.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
3. 清空原始数组,然后按照桶的顺序依次取出对应元素,重新加入到原始数组中。


我们以 $[692, 924, 969, 503, 871, 704, 542, 436]$ 为例,演示一下基数排序的整个步骤
我们以 $[692, 924, 969, 503, 871, 704, 542, 436]$ 为例,演示一下基数排序算法的整个步骤

![基数排序](http://qcdn.itcharge.cn/images/20230822171758.png)
![基数排序算法步骤](https://qcdn.itcharge.cn/images/20230822171758.png)

## 3. 基数排序代码实现

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,6 @@
输出: 4
解释: 9 出现在 nums 中并且下标为 4


输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

> **对撞指针**:指的是两个指针 $left$、$right$ 分别指向序列第一个元素和最后一个元素,然后 $left$ 指针不断递增,$right$ 不断递减,直到两个指针的值相撞(即 $left == right$),或者满足其他要求的特殊条件为止。
![对撞指针](https://qcdn.itcharge.cn/images/20230906165407.png)
![对撞指针](https://qcdn.itcharge.cn/images/202405092155032.png)

### 2.1 对撞指针求解步骤

Expand Down Expand Up @@ -272,7 +272,7 @@ class Solution:

> **快慢指针**:指的是两个指针从同一侧开始遍历序列,且移动的步长一个快一个慢。移动快的指针被称为 「快指针(fast)」,移动慢的指针被称为「慢指针(slow)」。两个指针以不同速度、不同策略移动,直到快指针移动到数组尾端,或者两指针相交,或者满足其他特殊条件时为止。
![快慢指针](https://qcdn.itcharge.cn/images/20230906173808.png)
![快慢指针](https://qcdn.itcharge.cn/images/202405092156465.png)

### 3.1 快慢指针求解步骤

Expand Down Expand Up @@ -376,7 +376,7 @@ class Solution:

> **分离双指针**:两个指针分别属于不同的数组,两个指针分别在两个数组中移动。
![分离双指针](https://qcdn.itcharge.cn/images/20230906180852.png)
![分离双指针](https://qcdn.itcharge.cn/images/202405092157828.png)

### 4.1 分离双指针求解步骤

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

滑动窗口利用了双指针中的快慢指针技巧,我们可以将滑动窗口看做是快慢指针两个指针中间的区间,也可以将滑动窗口看做是快慢指针的一种特殊形式。

![滑动窗口](https://qcdn.itcharge.cn/images/20230907105115.png)
![滑动窗口](https://qcdn.itcharge.cn/images/202405092203225.png)

## 2. 滑动窗口适用范围

Expand All @@ -29,7 +29,7 @@

> **固定长度滑动窗口算法(Fixed Length Sliding Window)**:在给定数组 / 字符串上维护一个固定长度的窗口。可以对窗口进行滑动操作、缩放操作,以及维护最优解操作。
![固定长度滑动窗口](https://qcdn.itcharge.cn/images/20230907110356.png)
![固定长度滑动窗口](https://qcdn.itcharge.cn/images/202405092204712.png)

### 3.1 固定长度滑动窗口算法步骤

Expand Down Expand Up @@ -149,7 +149,7 @@ class Solution:

> **不定长度滑动窗口算法(Sliding Window)**:在给定数组 / 字符串上维护一个不定长度的窗口。可以对窗口进行滑动操作、缩放操作,以及维护最优解操作。
![不定长度滑动窗口](https://qcdn.itcharge.cn/images/20230907132630.png)
![不定长度滑动窗口](https://qcdn.itcharge.cn/images/202405092206553.png)

### 4.1 不定长度滑动窗口算法步骤

Expand Down

0 comments on commit 50623e1

Please sign in to comment.