![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
yyc_ssasd
erp供应链
展开
-
AVL自平衡二叉树
参考:https://blog.csdn.net/qq_25343557/article/details/89110319二叉树二叉树查找效率是很高,如果数据值是一些有序数量,可能就会变成左子树或者右子树很长,导致查找效率和线性查找一样慢。那怎么解决这种某边子树非常长,但另一边特别短的情况呢,那就是AVL自平衡二叉树。AVL性质:首先肯定是一个二叉搜索树每个节点上左右子树的高度差不能大于1AVL必须满足这两个性质,尤其是第二个,高度差不能大于1。也就是平衡因子在这里使用左子树的高度原创 2020-06-17 18:38:53 · 146 阅读 · 0 评论 -
N皇后问题
N皇后问题N皇后问题就是在一张N*N棋盘上,放置N个皇后,他们之间不能横、竖、对角线存在使用回溯法实现package com.example.data;import com.sun.deploy.security.SelectableSecurityManager;/** * *@ClassName Nqueens * *@Author yyc * *@Date 2020/6/15 17:31 * N皇后问题 **/public class Nqueens { publi原创 2020-06-15 18:29:30 · 192 阅读 · 0 评论 -
迭代实现反转字符串
反转字符串反转字符串可以通过reverse来实现,也可以通过迭代方法实现package com.example.data;/** * *@ClassName reverse * *@Author yyc * *@Date 2020/6/15 16:42 **/public class reverse { public String reverse(String word) { if(word.length()==1) return原创 2020-06-15 17:01:05 · 256 阅读 · 0 评论 -
队列演示
队列队列是先进先出,与堆栈不一样数组实现数组实现主要采用双指针方式package com.example.data;/** * *@ClassName QueueList * *@Author yyc * *@Date 2020/6/15 15:15 **/public class QueueList { //头指针 private int Head; //尾指针 private int Tail; private int[] result;原创 2020-06-15 16:37:34 · 192 阅读 · 0 评论 -
stack演示
栈类似于往手枪里压入子弹,先进后出。数组实现package com.example.data;/** * *@ClassName stack * *@Author yyc * *@Date 2020/6/15 13:46 * 使用数组来实现堆栈结构 **/public class stackClass { private int length; //记录当前位置 private int topIndex; private int[] stacklist原创 2020-06-15 15:13:38 · 126 阅读 · 0 评论 -
算法-快速排序演示
快速排序快速排序是对冒泡排序的一种改良。排序原理:1、首先设定一个分界值,通过该分界值将数组分成左右两部分2、将大于或等于分界值的数据放到数组右边,小于分界值的数据放到数组的左边。此时左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值3、然后,左边或右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。4、重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排原创 2020-06-08 13:33:18 · 365 阅读 · 0 评论 -
算法-归并排序演示
归并排序排序原理:1、尽可能的一组数据拆分成两个元素相等的子组,并对每一个子组继续拆分,直到拆分后的每个子组的元素个数是1为止。2、将相邻的两个子组进行合并成一个有序的大组;3、不断的重复步骤2,直到最终只有一个组为止。源码 public class Merge { private static int[] result; public static List<int[]> res=new List<int[]>();原创 2020-06-08 09:15:54 · 351 阅读 · 0 评论 -
算法-希尔排序演示
希尔排序希尔排序是针对插入排序的改良版。排序原理:1、选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组2、对分好组的每一组数据完成插入排序3、减少增长量,最小减为1,重复第二步操作源码 /// <summary> /// 希尔排序 /// </summary> public class ShellSort { public static List<int[]> result = new Lis原创 2020-06-08 08:51:00 · 279 阅读 · 0 评论 -
算法-插入排序演示
插入排序排序原理:1、把所有元素分为两组,已经排序的和未排序的2、找到未排序的组中的第一个元素,向已经排序的组中进行插入3、倒叙遍历已经排序的元素,依次和待插入的元素进行比较,查找到一个元素小于等于待插入元素,那么就把待插入元素放到这个位置,其他的元素向后移动一位。源码/// <summary> /// 插入排序 /// </summary> public class InsertSort { public static L原创 2020-06-08 08:32:20 · 246 阅读 · 0 评论 -
算法-选择排序演示
选择排序排序原理:1、每一次遍历的过程中,都假定第一个索引出的元素是最小值,和其他索引处的值依次进行比较。如果当前索引处的值大于其他某个索引的值,则假定其他某个索引处的值为最小值,最后可以找到最小值所在的索引。2、交换第一个索引处和最小值所在的索引处的值。源码 public class SelectionSort { public static List<int[]> result=new List<int[]>(); public原创 2020-06-07 22:03:12 · 143 阅读 · 0 评论 -
算法-冒泡排序演示
冒泡排序排序原理:1、比较相邻的元素。如果前一个元素比后一个元素大,就交换这两个元素的位置2、对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素。最终最后位置的元素就是最大值。源码public class BubbleSort { public static List<int[]> result=new List<int[]>(); /// <summary> /// 冒泡排序原创 2020-06-07 21:54:53 · 267 阅读 · 1 评论 -
数据结构与算法-算法时间复杂度
算法的时间复杂度分析我们可以通过在代码里先获取执行前时间,再获取执行后时间,根据时间差来判断算法的执行时间,并来比较算法的优劣。这样分析有几个缺点:执行时间严重依赖硬件环境,内存大、CPU好的机器执行就快换一个算法就得重写一遍计算方法通过分析,我们认为编写好的程序在运行上所耗费的时间主要取决于以下几个因素:算法所采用的策略和方案编译产生的代码质量问题的输入规模机器执行指令的速度由此可见,抛去硬件的差别,算法执行时间主要取决于输入规模和使用的策略方法了。在分析程序的算法时,我们不原创 2020-06-04 09:02:53 · 188 阅读 · 0 评论 -
算法-深度搜索
深度搜索算法dfs深度搜索算法用于查找图中某一点到另一点的距离。下面有C#实现深度搜索算法 public class DepthFirstPaths { private Boolean[] marked;//用一个布尔数组存储哪些顶点已经被访问过 private int[] edgeTo;//从起点到一个顶点的已知路径上的最后一个顶点 priv原创 2017-10-24 21:21:56 · 768 阅读 · 0 评论 -
算法-二叉树查找排序
二叉树用C#实现二叉树二叉树的插入 public static void InsertNode(int data) { NodeTest newNode = new NodeTest(data); NodeTest parentNode; if (rootNode == null) {原创 2017-10-21 13:41:45 · 367 阅读 · 0 评论 -
算法-堆排序
堆排序数据结构中的二叉堆能够很好地实现优先队列的基本操作。在二叉堆的数组中,每个元素都大于或等于另两个位置的元素。相反的,或者都小于或等于另两个位置的元素。堆的实现将一个普通数组替换成一个二叉堆,首先需要进行建堆操作,比如将3,4,8,7,6替换成8,7,6,3,4类似的结构。 建堆代码如下: private static void buildHeap(ref int[] a) {原创 2017-10-21 10:27:04 · 138 阅读 · 0 评论 -
算法-快速排序
快速排序快速排序是一种较快的排序方法,现在用C#实现这种算法,代码如下:public static void quickSort(ref int[] a, int left, int right) { int i, j, temp,t; if (left > right)//如果是左边比右边大了,说明已经排序完成了,不需要再进行排序了原创 2017-10-20 16:12:49 · 160 阅读 · 0 评论 -
算法-希尔排序
希尔排序希尔排序是升级版插入排序,主要思路是,先把整个数组分为n份,对n份内的数组进行排序,然后再按照n/2份分组进行排序,直接到0为止。 public static int[] SortXE(int[] a) { int n = a.Length;//长度 int h = 1; while (h < n / 3原创 2017-10-19 20:37:39 · 179 阅读 · 0 评论 -
算法-插入排序
插入排序将一张牌插入到已经有顺序的牌中的适当位置。 插入排序与数组的初始输入顺序有关系,对于一个很大且其中的元素已经有序或接近有序的数组进行排序将会比随机顺序的数组或是逆序数组进行排序快得多。 public static int[] SortInsert(int[] a) { int n = a.Length; for (int i原创 2017-10-19 09:24:29 · 137 阅读 · 0 评论 -
算法-选择排序
实现选择排序算法 public static int[] Sort(int[] a) { int n = a.Length; if (n == 0) return null; int min = 0; for (int i = 0; i < n; i++)原创 2017-10-19 09:05:48 · 118 阅读 · 0 评论