
数据结构和算法
文章平均质量分 85
数据结构和算法
爱上口袋的天空
一步一流年,止不住的脚步,挽不回的青春!
展开
-
数据结构之树和二叉树
对于树这种数据结构,使用最频繁的是二叉树。每个节点最多只有2个子节点的树,叫做二叉树。二叉树中,每个节点的子节点作为根的两个子树,一般叫做节点的左子树和右子树。任意节点左子树如果不为空,则左子树中节点的值均小于根节点的值任意节点右子树如果不为空,则右子树中节点的值均大于根节点的值任意节点的左右子树,也分别是二叉搜索树没有键值相等的节点基于二叉搜索树的这种特点,在查找某个节点的时候,可以采取类似于二分查找的思想,快速找到某个节点。原创 2023-05-19 17:45:50 · 2228 阅读 · 1 评论 -
排序算法之基数排序
基数排序是桶排序的扩展,也是一种非比较排序。桶排序适用于数据分布比较均匀的情况,如果数据分布不是很均匀,并且数据中存在几个极大值,这会导致桶排序存在很多的空桶,这会造成内存的浪费,桶排序使用的是序列中元素的范围,基数排序使用的是序列中元素的位数,基数排序由于位数的范围是10位或者26位,所以可以避免创建过多的桶。基数排序将数据划分为一个个的关键字,其对相同数位上的关键字进行计数排序,如果位数不够则前面补0,从低位到高位进行排序,如果字符串比较可以从左到右比较。转载 2023-05-18 15:23:26 · 544 阅读 · 0 评论 -
排序算法之桶排序
桶排序桶排序时间复杂度是O(n+m+n(logn-logm)),空间复杂度是O(m+n), 稳定主要看桶中选取的排序算法。上面的代码时间消耗为n+m+n+(n/m*logn/m)*m + n,去掉系数为O(n+m+n(logn-logm)),当n=m时,时间复杂度是O(n),当选取桶不当时,所有数据在一个桶中,则是桶所选取的算法的时间复杂度。空间复杂度是O(m+n):上面集合的内存是m+n。转载 2023-05-18 13:54:06 · 3624 阅读 · 0 评论 -
排序算法之计数排序
计数排序是一种非比较排序,其核心是将序列中的元素作为键存储在额外的数组空间中,而该元素的个数作为值存储在数组空间中,通过遍历该数组排序。计数排序是非比较排序,时间复杂度是O(n+k),空间复杂度是O(k),是稳定算法。(n表示的是数组的个数,k表示的max-min+1的大小)时间复杂度是O(n+k):通过上面的代码可知最终的计数算法花费的时间是3n+k,则时间复杂度是O(n+k)。空间复杂度是O(k):如果出去最后的返回数组,则空间复杂度是2k,则空间复杂度是O(k)转载 2023-05-18 11:08:02 · 4872 阅读 · 0 评论 -
排序算法之快速排序、堆排序
堆排序是指利用堆这种数据结构所设计的一种排序算法。堆(Heap)是一个近似完全二叉树的结构,并同时满足堆的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。一般情况,将堆顶元素为最大值的叫做“大顶堆”(Max Heap),堆顶为最小值的叫做“小顶堆”。算法简单来说,就是构建一个大顶堆,取堆顶元素作为当前最大值,然后删掉堆顶元素、将最后一个元素换到堆顶位置,进而不断调整大顶堆、继续寻找下一个最大值。转载 2023-05-17 16:24:25 · 2181 阅读 · 0 评论 -
排序算法之选择排序、冒泡排序、插入排序、希尔排序、归并排序
比较类排序,和非比较类排序。通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。主要思路是通过将数值以哈希(hash)或分桶(bucket)的形式直接映射到存储空间来实现的。选择排序是一种简单直观的排序算法。转载 2023-05-16 17:33:33 · 531 阅读 · 0 评论 -
Java 位运算符简介
5>>2表示101右移2位,把最右边两位的01去掉,变为1,最后等于1。,等于除于2的n次方,结果为1。把两个数的二进制数从右边开始对齐,3为11,5为101,只有第一个数1都为1所以3&5=1。这是个二进制数,所以每个数都有2的影子。然后二进制转为十进制,需要把底数10转为2得到。5 >> 2 = 1,5的二进制位101。与右移运算符的区别就是在于负数的运算。或者看成 5* 2^2 = 20。相等的为0,不相等的为1。转载 2023-05-05 20:33:48 · 391 阅读 · 0 评论 -
算法复杂度简介
时间复杂度O(logn)—对数阶,当数据增大n倍时,耗时增大logn倍(这里的log是以2为底的,比如,当数据增大256倍时,耗时只增大8倍,是比线性还要低的时间复杂度)。时间复杂度O(n^2)—平方阶, 就代表数据量增大n倍时,耗时增大n的平方倍,这是比线性更高的时间复杂度。比如冒泡排序,就是典型的O(n x n)的算法,对n个数排序,需要扫描n x n次。,也就是耗时与输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变。时间复杂度为O(n)—线性阶,就代表数据量增大几倍,耗时也增大几倍。转载 2022-12-19 23:10:53 · 1167 阅读 · 0 评论