数据结构与算法
XSemperFI
无冥冥之志者,无昭昭之明,无昏昏之事者,无赫赫之功
展开
-
基础排序算法——归并排序
归并排序算法思想 算法思想 把数组从中间划分成两个子数组,一直递归的把子数组划分成更小的子数组,直到子数组里面只有一个元素。依次按照递归的返回顺序,不断地合并排好序的子数组,直到最后把整个数组的顺序排好。 ...原创 2020-04-09 22:35:15 · 194 阅读 · 0 评论 -
基础排序算法——冒泡排序
冒泡排序1 算法思想2 代码实现3 算法分析 1 算法思想 每一轮,从数组的头部开始,每两个元素比较大小并进行交换。直到这一轮当中最大或者最小的元素被放置在数组的尾部。然后不断的重复这个过程,直到所有元素都排好位置。 2 代码实现 public class BubbleSort { public static void main(String[] args) { int[...原创 2020-04-08 22:27:02 · 169 阅读 · 0 评论 -
二叉树遍历之中序遍历
二叉树遍历之中序遍历 二叉树的中序遍历与深度优先搜索很类似,对于深度优先算法,我们使用栈(Stack),广度优先搜索使用队列(Queue)。二叉树的中序遍历遵循三个步骤 遍历左树 访问根节点 遍历右数 首先从根节点开始,遍历它的左树。到达节点20,同样查找它的左子树,现在到达11节点,再查找它左边的节点,因为11节点没有左子节点,故返回并打印它的值。下一步我们尝试寻找11的右子树,也是空的。所...原创 2019-11-26 23:28:30 · 325 阅读 · 0 评论 -
插入排序
插入排序概述代码实现排序动画 概述 插入排序是将待插入元素插入到已有序部分中的过程,插入后仍然有序。假设有数组A的n个元素A[0] ~ A[n],令i从1到n枚举,进行n次操作。假设第i次操作时,A[0] A[i-1]已有序,而A[i]A[n]还未排序,那么从[0,i-1]中寻找某个位置j,使得将A[i]插入位置j后,范围[0,i]有序。此时A[j]A[i-1]会后移一位至A[j+1]A[i]。 ...原创 2019-10-11 00:02:44 · 132 阅读 · 0 评论 -
选择排序
选择排序描述特点代码实现排序过程 描述 首先,找到数组中最小的元素,其次,将它和数组的第一个元素交换位置。再次,在剩下的元素中找到最小的元素,再与数组的第二个元素交换位置。如此往复,直到将整个数组排序。 特点 每次交换都能排定一个元素,因此交换的总次数是N,所以算法的时间效率取决于比较的次数。对于长度为N的数组,选择排序大约需要 N2/ 2 次比较和N次交换。 运行时间和输入无关 : 一个已经有序...原创 2019-09-26 23:53:49 · 182 阅读 · 0 评论 -
散列表
散列表 概念引入 现有正整数数组N[8,7,6,4,3,2,1]和M[7,6,5],找出重复的元素。暴力的做法是,对每个要查找的数x,遍历所有N数组,看是有有相等的。这种做法的时间复杂度是O(n*m),当n,m很大的时候O(n^2),这显然是无法接受的。而散列表是算法在空间 和 时间作出权衡的经典例子,它采用一个映射函数,将关键字映射并记录在存储位置,从而在想要查找该记录时,可以直接根据关键字和映...原创 2019-10-26 17:18:04 · 218 阅读 · 0 评论