![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 81
Y734493585
这个作者很懒,什么都没留下…
展开
-
笔记笔记笔记
笔记本笔记原创 2022-09-09 01:36:36 · 581 阅读 · 0 评论 -
判断素数&计算素数个数
判断素数&计算素数个数java源码:import java.util.Scanner;public class Prime { //判断是否为素数 public static boolean isPrime(int n){ if(n==1)return false; if(n==2||n==3)return true; double sqrt=Math.sqrt...原创 2019-04-14 11:02:49 · 1545 阅读 · 0 评论 -
最大公约数&最小公倍数
最大公约数&最小公倍数最大公约数采用辗转相除法获得最小公倍数=(min(a,b)/最大公约数)*max(a,b)java源码:import java.util.Scanner;public class 最大公约数and最小公倍数 {//最大公约数 public static int max(int a,int b){ if(b%a==0)return a; retu...原创 2019-04-14 11:30:01 · 499 阅读 · 0 评论 -
java——链表
java自建链表class struct{ public int value; public struct next; struct(int value,struct next){ this.value=value; this.next=next; } struct(){ next=null; }}public class MyLinkedList {//1 1 1 ...原创 2019-04-17 21:38:20 · 350 阅读 · 0 评论 -
算法笔记
格式显示printf("%.nf",浮点数)保留小数n位printf("%nd",整数) 控制数字至少占n位(默认右对齐)printf("%-nd",整数)控制数字至少占n位,左对齐printf("%+nd",整数)控制数字至少占n位,显示+号printf("%±nd",整数)控制数字至少占n位,左对齐,显示+号转10进制为任意进制String s=Integer.toString(...原创 2019-04-26 22:13:06 · 560 阅读 · 0 评论 -
位运算
位运算逻辑与& :1&1=1,1&0=0,0&0=0逻辑非|: 1|1=1, 1|0=1 ,0|0=0位移操作如:13> >1 :向左移动一位(由1101 -> 110 13变为6)13< <1:向右移动一位(由1101 -> 11010 13变为26)...原创 2019-05-02 17:04:37 · 596 阅读 · 0 评论 -
字符串查找——KMP算法
字符串查找——KMP算法java源码:public class KMP { //pattern 原字符串,prefix 每个字符对应重复的字符个数,n字符串长度 public static void prefix_table(char []pattern,int[]prefix,int n){ prefix[0]=0; for(int i=1;i<n;i++){ /...原创 2019-04-23 21:03:56 · 556 阅读 · 0 评论 -
并查集
核心思想判断这个图中是否存在环先将每个点看作一个集合,通过连线将相连的点合并为同一个集合合并时:两个孤立的点,直接合并,随便选择一个点作为父节点非两个孤立的点,采取合并每个点的根节点(若根节点相同,证明已经在同一个集合,形成圈;若根节点不同,选取一个rank(rank指的是到达根节点经历的步数)长的(这样可以压缩长度)根节点作为父节点合并)java源码:///*...翻译 2019-05-19 10:05:03 · 353 阅读 · 0 评论 -
求集合子集
Java 源码import java.util.HashSet;import java.util.Set;public class ZiJi { public static Set<Set<Integer>> ziJi(int []a,int k){ Set<Set<Integer>> newSet=new HashSet<Set&...原创 2019-05-22 09:17:30 · 337 阅读 · 0 评论 -
全排列An&组合Cn
全排列An&组合Cnjava源代码:public class 排列组合 {//全排列An public static void A(int a[],int []visited,int n,int temp[]){ if(n==a.length){ for(int t:temp)System.out.print(t+" "); Asum++; System.o...原创 2019-04-14 10:00:04 · 10537 阅读 · 0 评论 -
桶排序——基数排序
基数排序(桶排序)核心思想:相比其他排序而言,基数排序不用将两个数字直接对比,而是根据一些关键字进行排序如【108,521,367】,关键字有个位,十位,百位。然后初始化一个桶,桶的个数由每个关键字的范围给出,这里个位,十位,百位关键字范围都为10(数字0——9).所以桶的个数10个开始分配,由个位开始,遍历原序列,根据每个数字的个位数字放入对应桶中,如108 放入8号桶中。此时排完序...原创 2019-04-09 13:18:37 · 354 阅读 · 0 评论 -
深度优先遍历——DFS
DFSjava 源码:import java.util.ArrayList;import java.util.LinkedList;public class Dfs { public static int foot[]; public static void main(String[] args) { ArrayList <Integer> al[]=new Arra...原创 2019-04-10 15:39:53 · 370 阅读 · 0 评论 -
插入排序——直接插入排序
直接插入排序(插入排序):核心思想:从没有顺序的位置开始(若为元素无规则,则从第二个元素开始)依次往前插入将插入元素和有序序列中依次从后往前比较,用临时变量存储插入元素,若大于插入元素就将比较元素后移, 否则就将插入元素插入比较元素的后一位。时间复杂度O(n^2)适用场景:对于有部分已经排好顺序的数组(此时比较插入元素就不从第二位置开始,而从无序位置开始)稳定性:稳...原创 2019-04-06 11:16:13 · 174 阅读 · 0 评论 -
插入排序——希尔排序
希尔排序核心思想:将原序列分为间隔为d(d=d/3+1其中d初始化为为数组长度)的子序列,对每个子序列进行直接插入排序。重复1步骤,直到d=1,且执行完d=1时的子序列的直接排序后结束时间复杂度:O(n^(1.3-2))适用场景:对于一些分布较为混乱的序列(特别是小的在最后,大的在最前这种情况下要比直接插入排序快得多)稳定性:不稳定(因为希尔排序 涉及到分组,所以相...原创 2019-04-06 11:25:51 · 363 阅读 · 0 评论 -
选择排序——简单选择排序
简单选择排序核心思想:选择当前位置(从第一个位置开始直到末尾),找到从当前位置到末尾中最小的一个数,将找到的最小数与当前位置交换时间复杂:O(n^2)适用场景:对于一些已经排好前面或后面部分的序列稳定性:不稳定,因为依次选取后面最小的和前面交换,前面的元素可能被交换到相同元素的后面java源码public class JianDanXuanZeSort { ...原创 2019-04-06 16:04:38 · 269 阅读 · 0 评论 -
选择排序——二元选择排序
二元选择排序核心思想:选择一个当前位置i,从开始到序列一半位置。每次遍历产生一个最大值,一个最小值。将产生的最小值和最大值分别与当前位置i和序列长度-i上的元素交换时间复杂度:O(n^2)适用场景:适用于简单选择排序的适用的场所,且为简单选择排序的升级版,时间快一半左右稳定性:不稳定(因为选取后面最小的和前面交换,前面的元素可能被交换到相同元素的后面,最大元素交换也...原创 2019-04-06 17:14:34 · 1122 阅读 · 2 评论 -
选择排序——堆排序
堆排序一个堆需要满足两个条件:是一颗完全二叉树(节点从上到下,从左到右)每个节点大于它自生的两个子节点,成为大根堆(或者每个节点小于它两个子节点,称为小根堆)堆排序的核心思想:1. 创建堆:从最后一个父节点 i 开始直到起始节点依次做heapify创建堆的重要方法——heapify: 若对节点 i 进行heapify操作,就是从节点 i 和其两个子节点中选择一个最大的与当前节...原创 2019-04-06 21:54:08 · 463 阅读 · 0 评论 -
交换排序——冒泡排序&改进的冒泡排序
冒泡排序&改进的冒泡排序核心思想:比较N趟,依次两两比较,大的后移(小的后移),每趟产生一个最大(最小)值时间复杂度:O(n^2)适用场景:一般不直接使用原生的冒泡排序,效率低(可使用改进的冒泡排序)稳定性:稳定(因为依次两两比较,只有前比后大才交换,相同的两个数不会交换)算法改进:可通过记录最后一次交换位置的地方,下趟排序就只比较到这个位置即可(因为...原创 2019-04-07 09:12:21 · 738 阅读 · 0 评论 -
插入排序——快速排序
快速排序核心思想:选区基准元素,将序列分为两部分,前半部分小于基准元素,后半部分大于基准元素。我们要做的就是左右扫描,当左边扫描到大于基准元素和右边扫描到小于基准元素 时,交换左右元素的位置,继续扫描交换,直到最后左右指针重合时,将基准元素插入中间位置,也就是将基准元素与重合指针指向的元素交换。然后将左右两部分分别进行快速排序。具体操作:选取一个基准元素(可随便选,为了编码方便,一般...原创 2019-04-08 08:47:22 · 931 阅读 · 0 评论 -
分治——归并排序
归并排序:核心思想:将一个序列划分为两个有序部分,然后合并(运用分治的思想)。详细步骤:对于一个杂乱序列,我们需要对将序列递归一直划分,直到两个子序列中都只有一个元素时(此时可以认为左右两部分都是有序的),然后合并这两个子序列为一个有序序列。然后返回上一层,此时上一层的子序列就也是有序的了,所以再合并,再返回上一层,直到最顶层时将整个序列合为一个有序序列。时间复杂度:O(nl...原创 2019-04-08 17:32:42 · 395 阅读 · 0 评论 -
最短路——Dijkstra
Dijkstrajava源码import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.List;import java.util.Map;class Vertex{ Vertex(in...原创 2019-04-15 18:36:52 · 1195 阅读 · 0 评论 -
最短路——BFS
BFS核心思想:将图先构建成二维数组。初始化一个队列,将起点加入队列。队头元素出队,依次遍历与它直接相连的节点。每次遍历到一个节点时,判断是否访问过: - 如果被访问过:跳过; - 如果未访问:&n...原创 2019-04-10 14:36:50 · 646 阅读 · 0 评论