普通算法
ThomasQxx
小菜鸡一个
展开
-
最短路径-迪杰斯特拉(Dijkstra)
算法思想:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,U.原创 2021-12-29 12:37:11 · 828 阅读 · 1 评论 -
克鲁斯卡尔(Kruskal)
核心思想假设连通网G=(V,E),令最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,{}),概述图中每个顶点自成一个连通分量。在E中选择代价最小的边,若该边依附的顶点分别在T中不同的连通分量上,则将此边加入到T中;否则,舍去此边而选择下一条代价最小的边。依此类推,直至T中所有顶点构成一个连通分量为止理解:图中的每个顶点都是一个连通分量,每次去寻找权值最小的边,然后判断最小生成树加入这条边是否会形成环,意思就是如果在不同的连通分量中则可以加入,如果在想通的连通分量中则不可以合并因为会构成环,怎原创 2021-12-27 13:45:36 · 319 阅读 · 0 评论 -
最小生成树-普利姆算法(Prim)
基本思想对于图G而言,V是所有顶点的集合;现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最小生成树中的边。 从所有uЄU,vЄ(V-U) (V-U表示出去U的所有顶点)的边中选取权值最小的边(u, v),将顶点v加入集合U中,将边(u, v)加入集合T中,如此不断重复,直到U=V为止,最小生成树构造完毕,这时集合T中包含了最小生成树中的所有边。public class Edge { public int start; public原创 2021-12-26 10:02:39 · 523 阅读 · 0 评论 -
算法——二分法查找
二分法:public static int BinarySearch(int[] a, int n, int key) { int low = 0; int high = a.Length - 1; int mid; while (low <= high) { mid = (low + high) / 2;原创 2020-06-16 10:35:18 · 124 阅读 · 0 评论 -
算法——希尔排序(缩小增量排序)
希尔排序属于插入类排序,是将整个有序序列分割成若干小的子序列分别进行插入排序;public static int[] Shell_Sort(int[] array) { int d = array.Length / 2; while (d >= 1) { for (int i = 0; i < d; i++) { .原创 2020-05-26 22:39:04 · 224 阅读 · 0 评论 -
算法——插入排序法
将一个记录插入到已经排好序的有序表中。外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动public static int[] Insert_Sort(int[] array) { //把数组第一个当做已经排好的数组 从后面依次选择一个与已经排好的数组进行比较 也就是从未排序的数组中每次拿出来一个插入到已经排列好的数组当中 for (int i = 0; i < array.Lengt.原创 2020-05-25 21:23:59 · 98 阅读 · 0 评论 -
算法——快速排序
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。public static int sortUnit(int[] Array, int low, int high) { int key = Array[low]; while (low < high) { .原创 2020-05-24 23:23:05 · 108 阅读 · 0 评论 -
算法——选择排序法
每次最外层循环进来,默认下表为i的元素为最小或者最大元素。记录min = i。然后依次和剩下的元素比较,如果有比它大或者小的元素,记录下来索引赋值给min。最后当每i轮循环完毕之后,判断min是否等于i。如果等于则说明i没有变,就是我们默认的最初的值,如果变了,说明最大值或者最小值发生了变化,则应该交换数据。这里要交换的是Array[i] 和Array[min]或者Array[max].public static int[] SelectSort(int[] Array) { .原创 2020-05-24 18:05:34 · 113 阅读 · 0 评论 -
算法——冒泡排序法
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对3.针对所有的元素重复以上的步骤,除了最后一个4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较public static int[] BubbleSort(int[] Array) { int temp; for (int i = 0; i < Array.Length-1; i++).原创 2020-05-23 23:20:26 · 137 阅读 · 0 评论