数据结构和算法
数据结构和算法
ChengNengNeng
这个作者很懒,什么都没留下…
展开
-
Huffman树
基本概念什么是赫夫曼树给一组数据,构建一颗huffman树思路:举例实现过程:数据:13,7,8,3,29,6,11、第一步排序:1,3,6,7,8,13,292、第二步找最小的两个权值,组成新树3、第三步重复上述步骤(排序+组成新树),直到只剩一个权值图解如下:代码实现:/** * 为了让Node实现排序,实现Comparable的compareTo方法 */@Datapublic class Node implements Comparable<N原创 2021-01-12 00:10:24 · 357 阅读 · 0 评论 -
树的遍历
//定义节点及遍历方法@Datapublic class HeroNode { private Integer id; private String name; private HeroNode left; private HeroNode right; public HeroNode(Integer id, String name) { this.id = id; this.name = name; } /*.原创 2021-01-10 15:15:49 · 218 阅读 · 0 评论 -
数组+链表实现HashTable
/** * 存储的对象 */@Datapublic class Emp { private Integer id; private String name; private Emp next; public Emp(Integer id, String name, Emp next) { this.id = id; this.name = name; this.next = next; }}/*** 链原创 2021-01-09 23:53:31 · 283 阅读 · 0 评论 -
快速排序
public class QuickSort { public static void main(String[] args) {// int[] arr = {2, 4, 1, 6, 1, 3, 9}; int[] arr = {2, 2, 2, 1, 1, 1, 1}; quickSort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); }原创 2021-01-09 23:02:35 · 108 阅读 · 0 评论 -
二分查找
思路:首先,二分查找必须在有序数组使用,如果无序先排序1.确定数组中间位置的下标mind=(left+right)/2;2.要查找的数findValue和中间数进行比较,如果findValue<arr[mind],向做递归查找,如果findValue>arr[mind],向右递归查找,如果相等就返回下标。(这里默认数组顺序从小到大)3.退出递归的情况两种一 找到了这个数二 根本没有这个数 left > right时,要结束递归代码:public class BinarySe原创 2021-01-05 00:10:50 · 144 阅读 · 0 评论 -
希尔排序
希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。public class ShallSort { public static void main(String[] args) { int[]原创 2020-12-16 00:48:36 · 359 阅读 · 0 评论 -
插入排序--直接插入排序
直接插入排序是将无序序列中的数据插入到有序的序列中,在遍历无序序列时,首先拿无序序列中的首元素去与有序序列中的每一个元素比较并插入到合适的位置,一直到无序序列中的所有元素插完为止。public class InsertSort { public static void main(String[] args) { int[] arr = {2, 4, 1, 6, 3, 9}; //将后面arr[1]到arr[n]的数往前面插 for (int i原创 2020-12-12 15:56:01 · 176 阅读 · 0 评论 -
选择排序
从arr[0]到arr[n-1]的数组里找出最小的,和第一个即arr[0]交换,确定最小值。第二趟,从arr[1]到arr[n-1]的数组里找出最小的,和第二个即arr[1]交换,确定第二个小值。依次类推到数组结束(n为数组长度,如果从大到小就找最大值)import java.util.Arrays;public class SelectSort { public static void main(String[] args) { int[] arr = {2, 4, 1,原创 2020-12-10 23:29:50 · 120 阅读 · 0 评论 -
冒泡排序
思路分析图两个指针一起往后移动,比较大小逆序就交换,完成一趟则可以确认一个最大的数。继续下一趟确认第二个较大的数代码实现import java.util.Arrays;/** * 冒泡排序 * 第一趟,比较相邻的两个(第i和i+1位置的)逆序则交换,i++后继续此操作,直到到 数组结束,完成一趟,此时最后一个即为最大的。 * 开始下一趟 只需要将前length-1个数字进行上述过程 * 直到最后一趟就剩一个数,结束排序 */public class BubbleSort {原创 2020-12-10 00:46:45 · 160 阅读 · 0 评论 -
回溯算法--8皇后问题
一、回溯算法主要用到递归调用1、递归概念:方法自己调用自己,每次调用时,传入不同的参数。有便于解决复杂问题,同时可以简洁代码2、能解决的问题和规则二、迷宫回溯/** * @author chengxn * @date 2020/11/26 * 迷宫回溯问题 */public class MiGong { public static void main(String[] args) { //数组模拟地图 int[][] map = new int[原创 2020-12-08 21:52:26 · 247 阅读 · 0 评论 -
栈实现逆波兰计算器
一、栈1、概念英文名stack,是一个先进后出的有序列表。插入和删除只能在栈顶进行操作,栈底固定。入栈push出栈pop2、应用场景1)子程序的调用:进入子程序之前,会先将下指令的程序地址存入栈中,子程序执行完成后,将地址取出,返回到原来的程序中。2)处理递归调用:和子程序调用类似,只是除了程序地址之外,还会将参数、区域变量等存进栈中。3)表达式的转换[中缀表达式转换后缀表达式]与求值4)二叉树遍历5)图形的深度优先搜索法3、数组模拟栈,入栈,出栈等操作/** * @author ch原创 2020-12-08 00:00:02 · 210 阅读 · 0 评论