随笔分类 -  【12】算法

摘要:时间复杂度:O(N) 两个前提满足条件: (一)排序的元素必须是整数 (二)排序的取值要在一定的范围内,并且比较集中 思想: 给定输入序列中的每一个元素x, 确定序列中值小于x的元素的个数; 【1】找出原数组中元素值最大的,标记为max; 【2】创建一个新数组count, 其长度是max+1, 其元 阅读全文
posted @ 2022-02-28 14:26 欧阳图图的少年成长记 阅读(98) 评论(0) 推荐(0)
摘要:桶排序是一种空间换取时间的排序,不是一种基于比较的排序,最好的情况下时间复杂度是O(n); java思路:用List[]类型的集合数组表示桶,每个List代表一个桶,将数据根据整除得到的值直接放到对应编号的集合里面,再依次排序; 桶排序思想:把数据分组,放在一个个的桶里面,然后对每个桶里面的数据再进 阅读全文
posted @ 2021-09-15 16:31 欧阳图图的少年成长记 阅读(58) 评论(0) 推荐(0)
摘要:单链表 增删改查操作 #include <stdlib.h>#include <stdio.h> typedef struct Node { int data; struct Node * next; }Node; // 打印链表 void PrintList(Node * head) { Node 阅读全文
posted @ 2020-09-09 10:32 欧阳图图的少年成长记 阅读(584) 评论(0) 推荐(0)
摘要:散列表即哈希表:用的是数组支持按照下标随机访问数据的特性,是数组的一种扩展。 时间复杂度:O(1) 散列函数: 对N取模, 哈希冲突: MD5用的hash算法,也会冲突 解决冲突 : (1)探测(线性寻址) (2)链表(拉链)(JDK1.7采用链表法)(JKD1.8引入红黑树) HashMap 结构 阅读全文
posted @ 2020-09-07 16:34 欧阳图图的少年成长记 阅读(145) 评论(0) 推荐(0)
摘要:平衡二叉搜索树(AVL) 特性: (1)左右子树的深度之差不超过1 红黑树(RBT) 红黑树的由来,解决了什么问题: 为了维持二叉搜索树的平衡性(避免元素一边倒,变成链表),数据结构内出现了各种类型的树,如AVL树(即平衡搜索树,特性是维持左右子树的高度差不超过1) 而红黑树使用了颜色的概念维持树的 阅读全文
posted @ 2020-09-07 11:57 欧阳图图的少年成长记 阅读(235) 评论(0) 推荐(0)
摘要:概念 二叉树: 树中每个节点最多有两个; 二叉搜索树: 1.若任意结点的左子树不空,则左子树上所有结点的值均不大于它的根结点的值。 2. 若任意结点的右子树不空,则右子树上所有结点的值均不小于它的根结点的值。 3.任意结点的左、右子树也分别为二叉搜索树。 二叉排序树: 1. 若它的左子树不空,则左子 阅读全文
posted @ 2020-09-01 17:52 欧阳图图的少年成长记 阅读(567) 评论(0) 推荐(0)
摘要:思想: 分治和递归 拆分再合并: 将元素拆分为每一个单位 怎么拆分的,就怎么合并 完整代码 #include <stdio.h> #include <stdlib.h> void PrintSort(int * a, int n) { printf("\n"); int i; for (i=0; i 阅读全文
posted @ 2020-09-01 10:08 欧阳图图的少年成长记 阅读(224) 评论(0) 推荐(0)
摘要:思想: 复杂度: O(logN) O(N) 堆的性质: 1: 堆中某个节点的值总是不大于或不小于其父节点的值; 2: 堆总是一棵完全二叉树。 堆分类为:大顶堆和小顶堆 解析: 第一步:建堆(举例大顶堆) 从父节点9开始从左往右,与左右孩子相比较,寻找比自己大的数,进行交换; 第二步:排序 将顶节点与 阅读全文
posted @ 2020-08-31 16:13 欧阳图图的少年成长记 阅读(178) 评论(0) 推荐(0)
摘要:思想: 每次选取最小或最大的数放在已排序的集合后面 完整代码 #include <stdio.h> void PrintSort(int * a, int n) { printf("\n"); int i = 0; for(i=0; i<n; i++) { printf(" %d ", a[i]); 阅读全文
posted @ 2020-08-31 15:57 欧阳图图的少年成长记 阅读(179) 评论(0) 推荐(0)
摘要:参考:https://wiki.jikexueyuan.com/project/easy-learn-algorithm/fast-sort.html 基本思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快 阅读全文
posted @ 2020-08-28 16:39 欧阳图图的少年成长记 阅读(143) 评论(0) 推荐(0)
摘要:中心思想: 依次比较相邻的两个数. 时间复杂度: 其它博文都没有讲过的一个重要知识点: 两两相比, 每比一次,最后一个就会被排好序,因此每一次比较的长度逐渐减小 每轮都是从头开始比较 完整代码 #include <stdio.h> // 最好的情况,正序 // 最坏的情况,倒序 void Print 阅读全文
posted @ 2020-08-28 15:48 欧阳图图的少年成长记 阅读(159) 评论(0) 推荐(0)
摘要:希尔排序的具体实现思路是:先将整个记录表分割成若干部分,分别进行直接插入排序,然后再对整个记录表进行一次直接插入排序。、 总结 : 不断缩小增量(gap)的排序过程 时间复杂度: 希尔排序相对来说,思路非常简单,但是很多网络文章,描述的及其麻烦,扰乱读者理解,这里我用最清晰方式解析; 注: int 阅读全文
posted @ 2020-08-28 14:05 欧阳图图的少年成长记 阅读(746) 评论(0) 推荐(0)
摘要:// 后续 阅读全文
posted @ 2020-08-20 11:56 欧阳图图的少年成长记 阅读(80) 评论(0) 推荐(0)
摘要:用二分查找法在有序表中找到正确的插入位置,是在折半插入排序的基础上改进,目的是减少排序过程中的移动次数; 基本思想: (1)另外设置一个同存储记录的数组大小相同的数组 d,将无序表中第一个记录添加进 d[0] 的位置上,然后从无序表中第二个记录开始,同 d[0] 作比较:如果该值比 d[0] 大,则 阅读全文
posted @ 2020-08-20 11:20 欧阳图图的少年成长记 阅读(591) 评论(0) 推荐(0)
摘要:二分查找 思想: 时间复杂度: O(log2n) // 二分查找 // 基础版 int BinarySearch(int * a, int l, int h, int find) { // a一定是有序的 while(l<=h) { // while(l<=h) l的初始化为0, h一般是sizeo 阅读全文
posted @ 2020-08-14 13:55 欧阳图图的少年成长记 阅读(319) 评论(0) 推荐(0)
摘要:思想: 将待排序的数据插入到前面已排好序的序列中、 时间复杂度: O(n^2) 看循环几次,一次就O(n) n此就O(n^2)、 #include <stdio.h> #include <stdlib.h> void PrintSort(int * a, int n) { int i; for(i= 阅读全文
posted @ 2020-08-14 10:16 欧阳图图的少年成长记 阅读(153) 评论(0) 推荐(0)
摘要:插入排序包括: 直接插入,折半插入,2-路插入,表插入,希尔排序等 时间复杂度所耗费的时间是:O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) <O(2n) < O(n!) <O(nn) 阅读全文
posted @ 2020-08-14 10:15 欧阳图图的少年成长记 阅读(124) 评论(0) 推荐(0)