选择
开启一个循环,每轮从未排序区间选择最小的元素,将其放到已排序区间的末尾。
- 初始状态下,所有元素未排序,即未排序(索引)区间为 。
- 选取区间 中的最小元素,将其与索引 0 处的元素交换。完成后,数组前 1 个元素已排序。
- 选取区间 中的最小元素,将其与索引 1 处的元素交换。完成后,数组前 2 个元素已排序。
- 以此类推。经过 轮选择与交换后,数组前 个元素已排序。
- 仅剩的一个元素必定是最大元素,无须排序,因此数组排序完成。
2025/8/28大约 12 分钟
开启一个循环,每轮从未排序区间选择最小的元素,将其放到已排序区间的末尾。
基于分治策略的高效搜索算法。它利用数据的有序性,每轮缩小一半搜索范围,直至找到目标元素或搜索区间为空为止。
时间复杂度:。
空间复杂度:。
图(graph)是一种非线性数据结构,由顶点(vertex)和边(edge)组成。
图的分类:
堆(heap)是一种满足特定条件的完全二叉树,主要可分为两种类型:
在哈希表中增删查改的时间复杂度都为 。
仅用一个数组来实现哈希表。数组中的每个空位称为桶(bucket),每个桶可存储一个键值对。因此,查询操作就是找到 key 对应的桶,并在桶中获取 value 。哈希函数的作用是将一个较大的输入空间映射到一个较小的输出空间。在哈希表中,输入空间是所有 key ,输出空间是所有桶(数组索引)。哈希函数的计算分为两步:
/* 随机访问元素 */
int randomAccess(int[] nums) {
// 在区间 [0, nums.length) 中随机抽取一个数字
int randomIndex = ThreadLocalRandom.current().nextInt(0, nums.length);
// 获取并返回随机元素
int randomNum = nums[randomIndex];
return randomNum;
}