
数据结构与算法
文章平均质量分 86
终于-我不再是那个少年
终于,我不再是那个少年!
展开
-
堆、堆排序、堆应用
堆”(Heap),原地排序、时间复杂度O(nlogn)的排序算法。堆是一个完全二叉树;堆中每一个节点的值都必须大于等于(或者小于等于)其子树中每个节点的值;原创 2022-11-27 23:50:11 · 458 阅读 · 1 评论 -
排序算法简述
常见的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序、桶排序、基数排序,这些排序各自有各自的特点。按照时间时间复杂度可以分为O(n^2):冒泡、插入、选择排序;O(nlogn):归并、快速排序;O(n):桶排序、计数排序、基数排序;原创 2022-11-27 13:47:23 · 493 阅读 · 0 评论 -
递归和排序算法的应用
然后取mid=(a+b)/2,然后把每个文件按照mid分割,取所有前面部分之和,如果小于1g就可以读入内存快排生成中间文件,否则继续取时间戳的中间值分割文件,直到区间内文件之和小于1g。快速排序是由上到下处理问题,利用原地分区,所以空间复杂度是O(1),不是稳定的排序算法。例如对十万个电话号码进行排序,借助与稳定的排序,从高位向低位开始进行排序,排序11次即可。基数排序对要排序的数据是有要求的,需要可以分割出独立的“位”来比较,且位之间有递进的关系,如果数据a的高位比数据b高位大,那剩下的就不用比较了。原创 2022-11-27 13:43:13 · 628 阅读 · 0 评论 -
跳表和散列表
因此需要维护一个常用密码的字典表,将字典中的密码进行哈希计算再哈希,针对字典攻击,可以引入盐(salt),和用户密码组合在一起,增加密码的复杂度。,动态扩容需要重新通过散列函数计算数据的存储位置,所以会导致在动态扩容的时候时间复杂度变为O(n),为了避免动态扩容时导致耗时过长,可以选择将扩容后的数据迁移操作分散开,每次插入只迁移部分数据,这样平均下来每次时间复杂度也是O(1)。链表要存储指针,存储较小对象时,比较消耗内存,另外链表中的节点时零散的,对CPU的缓存不友好。,这样可以进行区间和范围查找。原创 2022-11-21 23:05:56 · 665 阅读 · 0 评论 -
队列和栈的实现和应用
队列:先进先出栈:先进后出。原创 2022-11-02 16:21:58 · 331 阅读 · 0 评论 -
排序算法
一、插入排序—直接插入排序(Straight Insertion Sort) 时间复杂度:O(n^2).#include <iostream>using namespace std;const int MAX_SIZE = 10;template<class T>void insert(T a[], int n);int main(int argc, char** argv) { in原创 2017-03-04 21:34:53 · 250 阅读 · 0 评论 -
线性表——数组描述
一、抽象数据类型(abstract date tpye, ADT) 抽象数据类型linear原创 2017-03-06 21:22:57 · 702 阅读 · 0 评论