![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 55
左钦杨
程序员
展开
-
【算法基础(6)】链表
2)如果只有key,没有伴随数据value,可以使用HashSet结构(C++中叫UnOrderedSet)3》如果既有key,又有伴随数据value,可以使用HashMap结构(C++中叫Un0rderedMap4)有无伴随数据,是HashMap和HashSet唯一的区别,底层的实际结构是一回事5)使用哈希表增(put)、删(remove)、改(put)和查(get)的操作,可以认为时间复杂度为0(1),但是常数时间比较大。目前没有找到时间复杂度0(N*logN),额外空间复杂度0(1),又稳定的排序。原创 2023-04-11 17:35:53 · 414 阅读 · 0 评论 -
【算法基础(5)】桶排序
从个位开始排,随着高位依次进桶出桶。原创 2023-03-27 15:30:33 · 58 阅读 · 0 评论 -
【算法基础(4)】堆排序(二)
已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过K,并且K相对于数组来说比较小。大根堆排序,插入的值 和 父节点比较,如果比父节点大,和它交换,直到最大,就停止,通过这样的调整,得到的一定是大根堆。同理,在完全二叉树里,每一棵子数最小的值是头节点的值,就是小根堆。在完全二叉树里,每一棵子数最大的值是头节点的值,就是大根堆。把最小的弹出,保持小根堆,新加入的数字做heapfiy,i 左 son 2*1+1。i 右 son 2*1+2。父 (i-1) / 2。原创 2023-03-13 19:39:06 · 189 阅读 · 0 评论 -
【算法基础(3)】快速排序和堆排序
然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都 小于分界值,而右边部分中各元素都大于或等于分界值。首先设定一个分界值,通过该分界值将数组分成左右两部分。大根堆:其中每个节点的值都不小于其子节点。原创 2023-01-29 14:19:25 · 340 阅读 · 0 评论 -
【算法基础(2)】二分查找和斐波那契数列
nlogba=O(n0.793),取ε = 0.2,显然当 c = 3 / 4 时,对于充分大的 n 可以满足 a * f(n / b) = 3 * (n / 4) * log(n / 4)原创 2023-01-18 15:40:28 · 891 阅读 · 0 评论 -
【算法基础(1)】认识时间复杂度和常用排序算法
时间复杂度是一个函数,它定性描述该算法的运行时间,在软件开发中,时间复杂度就是用来方便开发者估算出程序运行时间,通常用算法的操作单元数量来代表程序消耗的时间,这里默认CPU的每个单元运行消耗的时间都是相同的。假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率呈现一定的关系,这称作为算法的渐近时间复杂度,简称时间复杂度,记为O(f(n)),其中n指的是指令集的数目。big O用来表示算法执行时间的上界。原创 2023-01-09 17:01:02 · 455 阅读 · 0 评论