- 博客(12)
- 收藏
- 关注
原创 数据结构 10 - 基数排序 && 堆排序
一、基数排序基本思想:将一个序列先按个位数大小排序,再按十位数大小进行排序,依次直到最大值的最大位数。说明:(1)基数排序是对传统桶排序的扩展,速度很快(2)基数排序是经典的空间换时间的算法,占用内存很大,当对海量数据进行排序时,容易造成OutOfMemoryError(3)基数排序是稳定的代码实现:public static void radixsort(int[] arr) { //1.找到最大的数的位数 int max = arr[0];
2021-06-09 21:13:12
248
原创 数据结构 08 - 插入排序 && 希尔排序
一、插入排序1.基本思想:把一组序列分成有序表和无序表两部分,依次把无序表中的数插入有序表中,直到排完无序表中的所有数。2.思路分析(1)把列表的第一个数定为有序表中的第一个数,然后后面所有数为无序表。(2)遍历无序列表,依次让表中的每一个数与有序表中的每一个数进行比较,然后找到合适的插入位置。代码实现: public static void InsertSort(int[] arr){ for (int i = 1; i < arr.length; i++) {
2021-05-29 18:11:07
139
原创 数据结构 07 - 冒泡排序 && 选择排序
一、冒泡排序实现1.将数组第一个数与其后面的数依次比较(1)如果大于,就与该数的的值互换(2)如果小于,则不变(3)最终数组第一个数就是最小的数了2.重复第一步骤,将第二个数与其后面的数进行比较(1)需要重复arr.length - 1轮的比较(2)每一轮都确定了第 i 个位置的值代码实现:public class BubbleSort { public static void main(String[] args) {// int[] arr = new int[
2021-05-27 21:46:22
214
原创 数据结构 06 - 递归回溯问题(二):八皇后问题
说明:理论上应该创建一个二维数组来表示棋盘,但是实际上可以通过算法,用一个一维数组即可解决问题,arr[8]={0,4,7,5,2,6,1,3}//对应arr下标表示第几行,即第几个皇后;arr[i]=val,val表示第i+1个皇后,放在第i+1行的第val+1列。(摆皇后,规则为不同行不同列不同对角线,总共有92种摆法)代码实现:public class Queue8 { //定义一个max表示共有多少个皇后 int max = 8; //定义数组array,保存皇后放置.
2021-05-26 21:41:41
119
原创 数据结构 05 - 递归回溯问题(一):小球找路问题
一、思路分析1.先创建一个二维数组模拟迷宫,把相应点置为12.规则:0表示该点没有走过;1表示墙;2表示通路可以走;3表示该点已经走过,但走不通3.策略:下->右->上->左二、代码实现public class MG { public static void main(String[] args) { //0:表示没走过;1:表示墙;2:表示可以走通;3:表示走过但不通;策略:上右下左 int[][] map = new int[8][7]
2021-05-25 21:25:19
162
原创 Java基础 02 - 统计文本各字符出现次数
一、思路分析遍历文本的每一个字符,将字符及出现的次数保存在Map中,最后把Map中数据写入文件二、代码实现public void test3(){ FileReader fr = null; BufferedWriter bw = null; try { //1.创建Map集合 Map<Character, Integer> map = new HashMap<>();
2021-05-23 15:19:56
295
原创 Java基础 01 - 图片的加密与解密:熟悉对I0流的使用
代码实现:public class PictureTest { //图片的加密 @Test public void test1(){ FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream("1.jpg"); fos = new FileOutputStream("
2021-05-23 14:35:47
114
原创 数据结构 04 - 逆波兰表达式实现 && 中缀转后缀表达式
一、逆波兰表达式(后缀表达式)(1)定义:运算符位于操作数之后,例如:3 + 4 * 5 - 6,则写成3 4 + 5 * 6 -(2)思路分析:1.先定义个逆波兰表达式:3 4 + 5 * 6 -2.先将"3 4 + 5 * 6 -"放到ArrayList配合栈完成计算3.将ArrayList传递给一个方法,遍历ArrayList,遍历ArrayList配合栈完成计算(3)代码实现:public class PolandNotation { public static void ma
2021-05-18 20:34:46
468
原创 数据结构 03 - 数组模拟出入栈 && 使用栈实现表达式的计算
1.基本介绍(1)栈是一个先入后出的有序列表(2)栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶,另一端为固定的一端,称为栈底。(3)根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最后放入的元素最后删除。2.应用场景(1)子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。(2)处理递归调用:和子程序的
2021-05-07 20:23:15
241
原创 数据结构 02 - 单链表的使用 && 环形链表的实现与应用
链表:链表是有序的列表(学树和图的基础)(1)链表是以节点的方式来存储的,即链式存储(2)每个节点包含data域,next域,后者指向下一个节点(3)如图可知,链表的各个节点不一定是连续存储(4)链表分为带头节点的链表和没有头节点的链表,根据实际需要确定使用单链表使用红楼梦人物排列:(1)完成对人物的增删改查操作(2)第一种添加方法:直接添加到链表的尾部(3)第二种添加方法:根据序号排名将人物插入到指定位置(如果该位置已有数据,则提示已有数据,无法添加)代码实现:public cla
2021-04-30 10:59:20
192
原创 数据结构 01 - 稀疏数组的实现 && 数组模拟循环队列
上图二维数组中,存在太多重复值0,整个数组存放了很多无意义的数组,也就消耗了不必要的内存空间。一、二维数组转稀疏数组的思路1.遍历原始的二维数组,得到有意义数据的个数sum2.根据sum就可以创建稀疏数组sparseArr[sum+1][3]3.将二维数组的有意义数据存入稀疏数组中代码实现:二、稀疏数组转原始数组的思路1.先读取稀疏数组的第一行,从第一行获取原始数组的行列数,比如上面数组就是11*112.再读取稀疏数组后几行的数据,并赋给原始二维数组即可...
2021-04-25 21:51:47
202
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人