数据结构与算法之美-11线性排序 发表于 2019-07-16 前两篇学习了五种常见的排序算法,时间复杂度最低的也需要O(nlogn)。 本片介绍三种时间复杂度为O(n)的排序算法:桶排序、计数排序、基数排序,但是这三种排序算法都需要特定场景前提才能适用。 桶排序 前提:假设需要排序的n大小数据源可以平分为m个桶(区块),每个区块里的数据是无序的,但桶与桶之间是 ... 阅读全文 »
数据结构与算法之美-10排序(二) 发表于 2019-07-15 回顾上篇中介绍了冒泡排序、插入排序、选择排序,得到结论插入排序要优于另外两者 ,但即便如此,插入排序的平均时间复杂度依旧是O(n²),在大规模数据排序时效率很低。 该篇学习两种时间复杂度为O(nlogn),效率更高的排序: 归并排序、快速排序。 一、分治思想在学习之前,我们需要先了解分治思想理念。 ... 阅读全文 »
数据结构与算法之美-09排序(一) 发表于 2019-06-14 常见的排序算法常见的排序算法有很多,例如: 冒泡排序 插入排序 快速排序 选择排序 归并排序 计数排序 桶排序 … 疑问:这么多排序,开发中怎么选择?它们各自有什么特点? 排序算法的对比方法要想解决上面的疑问,就需要知道每种排序背后的原理,从而比较出什么样的排序适合什么样的场景。 在开始比较之前 ... 阅读全文 »
数据结构与算法之美-08递归 发表于 2019-06-13 什么是递归?斐波那契数列在讲解递归前,还是聊聊经典的斐波那契数列。 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 这个数列从第3项开始,每一项都等于前两项之和。 求解数列中第n个数是多少? 分析: n=1 -> 1 n=2 -> 1 n=3 -> 1+1 = ... 阅读全文 »
数据结构与算法之美-07队列 发表于 2019-05-31 一、什么是队列也是一种“操作受限”的线性表结构,只支持数据的添加(入队-enqueue)和删除(出队dequeue)操作,并具备先进先出特性。 使用场景: 资源有限时,例如线程池、数据库连接池、消息池。 二、队列的实现 数组实现 - 顺序队列 链表实现 - 链式队列 定义队列接口: interf ... 阅读全文 »
数据结构与算法之美 - 06栈 发表于 2019-05-27 一、什么是栈?一种“操作受限”的线性表结构,只支持数据的添加(入栈-push)和删除(出栈-pop)操作,并具备先进后出,后进先出特性。 栈的实现使用数组、链表都可以实现栈数据结构。数组实现的栈我们称之为顺序栈;链表实现称之为链式栈。 通过栈的概念我们抽象出一个栈最基本的功能接口: interfa ... 阅读全文 »
数据结构与算法之美 - 05链表(二) 发表于 2019-05-20 链表操作练习这篇主要编写几道单向链表操作练习: 单链表Node class Node { public int data; public Node next; public Node(int data) { this.data = data; } ... 阅读全文 »
数据结构与算法之美 - 04链表(一) 发表于 2019-05-19 数据结构与算法之美-学习大纲 前篇提到了链表也属于线性表结构。那么可想而知,链表在内存中存储的形式肯定也是类似于一条直线进行延伸的。 从内存图中我们可以看出,链表数据结构的内存分配情况并不是连续,作为线性表结构的关键就在于每个数据节点都是由数据块和“指针”块组成。 数据块 : 存储真正的数据 ... 阅读全文 »
数据结构与算法之美 - 03数组 发表于 2019-05-19 数据结构与算法之美-学习大纲 什么数组? 数组是一种 线性表 数据结构。它用一组 连续的内存空间,来存储一组 相同类型 的数据。 线性表数据排成一条线一样的数据结构。除了数组,还有链表、队列、栈等都是线性表结构。 而与之对立的概念称为非线性表,属于这类数据结构的有:树、图、堆等。 连续的内存空 ... 阅读全文 »