数据结构与算法分析
文章平均质量分 58
本专栏包含了数据结构和算法的相关知识和刷题笔记
一只眠羊e
人之所以会累,就是因为常常徘徊在坚持和放弃之间。
展开
-
堆排序及代码实现
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;堆排序的平均时间复杂度为 Ο(nlogn)。一般用数组来表示堆,下标为 i 的结点的父结点下标为(i-1)/2;其原创 2022-04-05 19:54:44 · 591 阅读 · 0 评论 -
归并排序及代码实现
归并排序是分治法的有效应用,算法步骤是:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;设定两个指针,最初位置分别为两个已经排序序列的起始位置;比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;重复步骤 3 直到某一指针达到序列尾;将另一序列剩下的所有元素直接复制到合并序列尾。下面这张图能更好的表达归并排序的步骤:归并排序是稳定排序,i指针设置在前面部分,j指针设置在后面部分,ij都是依次向后走,期间不会发生不稳定。Python实现原创 2022-04-05 19:22:56 · 308 阅读 · 0 评论 -
基数排序及代码实现
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序 vs 计数排序 vs 桶排序基数排序有两种方法:这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异:基数排序:根据键值的每位数字来分配桶;计数排序:每个桶只存储单一键值;桶排序:每个桶存储一定范围的数值基数排序的实现可以采用一种从低到高的排序思想,先对数组中所有的个位数排序,个位原创 2022-03-31 23:03:29 · 473 阅读 · 0 评论 -
桶排序及代码实现
桶排序是一种用到了哈希表的排序方法。哈希表查找的方法是用取余做哈希函数,排序用取整做函数。桶排序是计数排序的升级版,计数排序的索引是这个数字出现的次数,而桶排序则更加灵活,索引可以由哈希函数任意设置你想要的样子,哈希函数的设计是决定桶排序是否高效的前提。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:在额外空间充足的情况下,尽量增大桶的数量使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中同时,对于桶中元素的排序,选择何种比较原创 2022-03-31 22:20:31 · 912 阅读 · 0 评论