![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
永恒星
这个作者很懒,什么都没留下…
展开
-
刷题心得
如果需要用到查找,或者需要计算某个元素出现的次数——用Dictionary未完待续。。。原创 2020-09-09 21:43:10 · 146 阅读 · 0 评论 -
C#用堆实现优先级队列
【int版本】using System;using System.Collections.Generic;namespace MyDS{ class PriorityQueue { private int[] array; public int Count { get; private set; } private bool isMax;//true表示大顶堆,默认的,false表示小顶堆 public Pri原创 2020-08-05 11:09:39 · 588 阅读 · 0 评论 -
各类二叉树及其应用
【各类二叉树】二叉树的特点:兼顾静态查找和动态修改,即既能像数组一样快速查找也能像快速增删 二叉树:每个节点的度数不超过2 真二叉树:每个节点的度数为0或2 完全二叉树:叶节点在最底部的两层,且最底层的叶节点在左侧 满二叉树:所有叶节点都在最底层,每层节点度数为2 二叉搜索树BST:使得二叉树更加高效地实现查找,类似数组有序后的查找,其特点为: 任意节点大于或等于左孩子,小于或等于右孩子 中序遍历单调非降 平衡二叉搜索树BBST:在BST的基础上,使得兄弟子树的高度彼此接原创 2020-07-19 22:41:10 · 1243 阅读 · 0 评论 -
排序算法C#实现之推排序详解
【任务目标】将一组无序数组变为有序【堆排序原理】首先,要对二叉树有个基本的了解。在大顶堆中,我们可以轻易获得最大值。在小顶堆中,我们可以轻易获得最小值。以大顶堆为例,我们将获得的最大值Max拿出来,将它和数组arr的末尾元素X交换,这样我们将数组中的最大值放在数组的末尾了(即我们从小到大,升序排序)。这就和选择排序一样,选择最值来依次排序。在选择排序中,我们是靠剩余元素的比较来获取最值的。在推排序中,我们靠大顶堆来获取最值(大顶堆的第一个元素就是当前最大值)。而现在将Max和X交换后原创 2020-07-05 11:20:05 · 361 阅读 · 0 评论 -
排序算法C#实现之计数排序、桶排序、基数排序详解
【任务目标】将一组无序数组变为有序【计数排序原理】找到数组中的最大值Max和最小值Min。那么数组中其他的所有数都在Min和Max之间 设置Max-Min+1个桶(盒子、容器,怎么说都可以),每个桶只能装一种数。那么数组中的所有数都能找到对应的桶,桶中数字的个数表示数组中有多少个这样的数。 按顺序把桶中的数字取出来,桶内数字个数为0表示改桶内没数字了,继续取下一个桶,直到取完对应数字为Max的桶。此时按顺序取出来的数字是有序的。【计数排序原理概括】根据数组中最大值和最小值设置相应数量的原创 2020-06-30 17:49:21 · 406 阅读 · 0 评论 -
排序算法C#实现之快速排序详解
【任务目标】将一组大规模无序数组变为有序【快速排序原理】在数组中随机选择一个数作为基准数temp, 在数组中从后往前找一个比temp小的数lo,交换lo和temp 在数组中从前往后找一个比temp大的数hi,交换temp和hi 重复2、3找lo和hi,直到找不到这样的数lo,hi。此时temp左边的数都<=它,右边的数都>=它。此时temp所在位置就是数组有序后其应该在的位置 将temp左边的数看做一个无序数组,重复步骤1-4,又会得到一个新的temp 将temp右边的数看原创 2020-06-23 22:29:19 · 3000 阅读 · 0 评论 -
排序算法C#实现之希尔排序详解
【任务目标】将一组大规模无序数组变为有序【希尔排序原理】在此之前,请先理解插入排序原理。对于{9,8,7,6,5,4,3,2,1,0}这样一个数组来说,要把0移动到最前面,按照插入排序的移动方式,要移动很多次。可以看到,当我们选择无序部分的元素时,选择的无序部分的第一个元素(按数组下标从左到右),也就是有序部分的最后一个元素右边的元素,即我们每次选择无序部分元素时的增量是1,如果要选择到整个数组的最后一个元素(也即无序部分最右边的元素)时,要经过很多次。如何能很快选择到无序部分最右边的元素呢原创 2020-06-23 17:55:14 · 1353 阅读 · 0 评论 -
动态规划——最长公共子序列/最长公共子串C#实现
【参考资料】https://blog.csdn.net/u013074465/article/details/45392687https://blog.csdn.net/weixin_40673608/article/details/84262695https://blog.csdn.net/hrn1216/article/details/51534607原创 2020-06-13 21:23:37 · 2974 阅读 · 0 评论 -
C#用栈实现十进制到二进制、八进制、十六进制的转换
【前置知识】数据结构之栈进制转换的数学计算方式【代码实现】using System;using System.Collections;namespace StackStruct{ class StackApplication { public static void Decimalism2N(int number, int n) ...原创 2020-01-14 10:53:18 · 3227 阅读 · 1 评论 -
C#实现单链表
【前置知识】数据结构之链表泛型接口类(属性、对C#构造器的理解)(有了这些知识,代码很快就能看懂,这些知识不熟的话,要看好久)【节点的构成】新建一个类,用于存放节点类namespace SingleLinkedList{ /// <summary> /// 单链表的节点 /// </summary> //...原创 2020-01-11 10:15:10 · 794 阅读 · 0 评论 -
排序算法C#实现之选择排序详解
【任务目标】将无序数组变为有序数组【选择排序原理】先从数组中选出一个最小的元素,将其与数组首元素交换位置 从剩下的n-1个元素中选出最小的元素,将其与数组的第二个元素交换位置 从剩下的n-2个元素中选出最小的元素,将其与数组的第三个元素交换位置 以此类推,直到剩下的元素个数为0【选择排序原理概括】通过循环,每次选出在当前的剩余元素中最小的元素,使得这些选出的元素构成有序数组...原创 2020-01-08 11:07:09 · 1600 阅读 · 0 评论 -
排序算法C#实现之插入排序详解
【任务目标】将一组无序数组变为有序【插入排序原理】将数组分为两部分,有序的部分和无序的部分。每次从无序的部分中选择一个元素,将该元素插入有序部分,多次插入后,有序部分的元素越来越多,无序部分的元素越来越少,直到无序部分元素为0。 可以看见,每次迭代时,有序部分元素数量加一,无序部分元素数量减一。若有n个元素,那么要迭代n次。...原创 2020-01-06 14:37:22 · 2885 阅读 · 2 评论 -
排序算法C#实现之归并排序详解
【任务目标】将一组无序数组变为有序(文中暂定为:数组=向量)【归并排序原理】先考虑两个有序向量如何合并成为一个新的有序向量: 我们可以认为任务目标想获得的有序向量是由有序向量A和B组成,其中有序向量A又是由两个有序向量A1和A2组成,对B、A1、A2继续往下分,直到向量中元素个数为1,此时,该向量自然是有序的。(这就是在递归)(这就是分治策...原创 2019-12-25 10:20:36 · 1627 阅读 · 1 评论 -
二分查找之C#实现详解
【前置知识】二分查找是对有序数组(向量)而言的,所以在使用二分查找前要确保数组已经是顺序的(用到排序算法)。【二分查找原理】聚会时通常会玩猜数字的游戏:先由坐庄的人来写一个数字(比如在1~1000之内) 让大家轮流猜,并告诉大家正确数字比当前猜的数字大或者小 每猜一次范围就会缩小,最后猜中的人倒霉挨罚二分查找要求只能猜中位数,每次让猜的范围缩小一半,这样很快就能猜中,也即很快...原创 2019-12-20 11:07:23 · 2590 阅读 · 0 评论 -
排序算法C#实现之冒泡排序详解
【任务目标】假设现在我们有一组数据A={1,9,5,4,3,6,8,2,7,0},将数据组中的数据元素从小到大排列(即顺序,反之逆序),使得数据组由无序变为有序。【冒泡排序原理】第一步:按照从左到右的顺序获取数据元素。(注意:“从左到右”是我们在视觉上看这组数据的描述,在内存中或者说在写代码时,我们是按照数据元素的索引从小到大获取元素的。)第二步:比较获取的第一个元素与第二个元素的...原创 2019-12-07 10:40:27 · 2056 阅读 · 0 评论