
数据结构
文章平均质量分 71
Money、坤
人间烟火 各有遗憾 今天比昨天好就有希望
展开
-
【算法】七大排序详解(下篇)
简单总结一下,在长度为50000的数组,数值在【0~整形最大值】的数组上进行排序测试,O(N^2)的算法和O(NlogN)算法性能上确实是差了很多,包括优化后的排序算法也比优化前的性能好了很多,故在某些场景下,选择合适的排序算法才是成功之道。排序思路:又称缩小增量排序,给定一个数值gap,将原数组按照gap分为若干个组,组内再进行插入排序,直到gap=1,整个数组已经被调整的接近有序,最后再全集和上进行一次插入排序即可;二是合而为整,就是将拆分的数组不断合并,同时合并的过程中将数组有序化。原创 2022-07-30 16:37:35 · 232 阅读 · 0 评论 -
【算法】七大排序详解(上篇)
排序思路每次从无序区间选择一个数插入到合适的位置,插入过程类似于扑克牌的码牌过程,插入排序虽然是O(N^2)的排序算法,但是在近乎有序的数据集上,插入排序的性能甚至优于NlogN的排序算法,所以,插入排序也作为其他高阶排序算法的优化手段;排序思路遍历原数组,依次比较前后元素的大小,如果后一元素比前一元素小,则交换它们位置,否则继续向后遍历,直至整个数组有序;排序思路将待排序数组分为有序区间和无序区间,每次从无序区间选择一个元素添加到有序区间指定位置,直至整个数组有序;时间复杂度O(n^2)......原创 2022-07-29 21:17:08 · 241 阅读 · 0 评论 -
【数据结构】优先级队列的实际应用之TopK问题
自定义一个降序的比较器,创建优先级队列时传入比较器}}/***升序的比较器Students1=newStudent("胡歌",30);Students2=newStudent("江江",24);Students3=newStudent("浩存",20);//1.比较器写法Queuequeue=newPriorityQueue(newStudentDesc());.........原创 2022-07-28 11:46:34 · 212 阅读 · 0 评论 -
【详解】优先级队列的底层实现
堆本质上是一颗完全二叉树,基于最大堆实现的优先级队列,堆顶元素就是当前队列中的最大值,每次出队操作,就从堆顶取出最值,就实现了出队的优先级(JDK中的优先级队列是基于最小堆实现的)。优先级队列底层是基于堆的实现,按照优先级的大小动态出队(动态指的是元素个数动态变化,而非固定)。普通队列FIFO。按照元素的入队顺序出队,先入先出。优先级队列的实际应用之TopK问题。父节点索引(k-1)/2。左子树节点2K+1。右子树节点2k+2。...原创 2022-07-27 23:13:06 · 1449 阅读 · 0 评论 -
【面试必看】链表的常见笔试题
1. 合并链表链接:https://leetcode.cn/problems/merge-two-sorted-lists2. 反转链表3. 链表中倒数第k个节点4. 删除链表的倒数第N个节点5. 相交链表6. 环形链表7. 回文链表8. 反转指定区间上范围的链表原创 2022-06-26 11:47:05 · 527 阅读 · 0 评论 -
【数据结构】二叉树知识点详解
二叉树一、概念1. 1 定义一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树的特点:每个结点最多有两棵子树,即二叉树不存在度大于 2 的结点。二叉树的子树有左右之分,其子树的次序不能颠倒,因此二叉树是有序树。如下图为一颗二叉树:1. 2 概念节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6;树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为6叶子节点或终端节点:度为0的节点称原创 2022-05-20 20:44:18 · 4130 阅读 · 0 评论 -
【排序算法】快速排序的详解
1.基准值默认选择左侧区间的第一个元素,也可以是其他位置元素;2.在快速排序中,当数组元素小于等于15时,进行插入排序优化算法;3.区间的定义一定要明确,边界值的判断要清晰。原创 2022-03-23 23:59:58 · 922 阅读 · 0 评论