摘要: 快速排序的核心思想是:从待排序数组中任选一个数字作为 pivot(分区点),然后遍历所有数组元素,将小于 pivot 的放到左边,将大于 pivot 的放到右边,将 pivot 放到中间,此时,pivot 对应的数字排序完成;再将 pivot 左边和右边的数据,分别按照前面的方法进行排序。 阅读全文
posted @ 2023-10-04 23:46 有点成长 阅读(170) 评论(0) 推荐(0)
摘要: 归并排序的核心思想是:将待排序数组从中间分成两个子数组,对两个子数组分别排序,然后将排好序的两个子数组合并,这样整个数组就排序完成了。每次合并从两个子数组中逐个取最小值放入合并后数组,这样可以保证合并后的数组有序。 阅读全文
posted @ 2023-10-04 23:44 有点成长 阅读(209) 评论(0) 推荐(0)
摘要: 排序算法 时间复杂度 空间复杂度 稳定性 算法核心 插入排序 O(n2) O(1) 稳定 插入排序 一、算法原理 插入排序将数组分为已排序区间和未排序区间,初始已排序区间只有数组第1个元素,未排序区间从下标 1 开始到数组末尾。每次取未排序区间的第1个元素,将它插入已排序区间的合适位置,并保证已排序 阅读全文
posted @ 2023-10-04 23:27 有点成长 阅读(157) 评论(0) 推荐(0)
摘要: 排序算法 时间复杂度 空间复杂度 稳定性 算法核心 选择排序 O(n2) O(1) 不稳定 比较交换 一、算法原理 选择排序将数组分为已排序区间和未排序区间,初始已排序区间无元素,未排序区间从下标 0 开始到数组末尾。每次选择未排序区间的最小元素,将它放到已排序区间末尾。一次选择会让一个元素移动到它 阅读全文
posted @ 2023-10-04 20:44 有点成长 阅读(225) 评论(0) 推荐(0)
摘要: 排序算法 时间复杂度 空间复杂度 稳定性 算法核心 冒泡排序 O(n2) O(1) 稳定 比较交换 一、算法原理 冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,如果不满足大小关系要求,就进行交换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个 阅读全文
posted @ 2023-10-04 20:39 有点成长 阅读(2101) 评论(0) 推荐(0)
摘要: 排序是对批量数据按照一定的顺序进行排列的操作。学习排序算法,就是学习每一种算法的算法原理、代码实现,以及如何评价算法优劣。 阅读全文
posted @ 2023-10-04 17:15 有点成长 阅读(61) 评论(0) 推荐(0)
摘要: 一、先进先出(FIFO) 队列是一种操作受限的线性表,只允许在队头进行删除操作,在队尾进行添加操作。向队尾添加元素叫做入队,从队头删除元素叫做出队。 适用场景:对于大部分资源有限的场景,当没有空闲资源时,基本上都可以通过队列来实现请求排队。比如,线程池、连接池、消息队列等。 二、队列的实现 队列可以 阅读全文
posted @ 2023-09-24 00:35 有点成长 阅读(53) 评论(0) 推荐(0)
摘要: 一、后进先出(LIFO) 栈是一种操作受限的线性表,只允许在一端插入和删除数据,这一端叫做栈顶,对应的另一端叫做栈底。向栈中添加元素也叫进栈、入栈、压栈,从栈中删除元素也叫出栈、退栈、弹栈。 适用场景:当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,就应该首选栈。 二、栈 阅读全文
posted @ 2023-03-01 23:10 有点成长 阅读(63) 评论(0) 推荐(0)
摘要: 【基本数据结构】链表 链表通过指针将一组零散的内存串联在一起,也是一种非常基础、非常常用的数据结构。 一、常见的3种链表 从内存的角度来看,数组需要一块连续的内存空间,对内存的要求比较高。但是,链表并不需要连续的内存空间,而是通过“指针”将一组零散的内存串联起来。 如果我们申请一个 100M 大小的数组,当内存中没有连续 阅读全文
posted @ 2023-02-28 23:47 有点成长 阅读(283) 评论(0) 推荐(0)
摘要: 编程语言中,基本都会有数组这种数据类型。不过,它不仅仅是编程语言中的一种数据类型,还是一种最基础的数据结构。 一、数组支持随机访问 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组类型相同的数据。 1.1 线性表 线性表就是数据排成一条线一样的结构。每个线性表上的数据最多只 阅读全文
posted @ 2023-02-27 23:49 有点成长 阅读(179) 评论(0) 推荐(0)