多维数组(冒泡排序,稀疏数组)
多维数组
多维数组可以看成是数组的数组, 比如二维数组就是一个特殊的一维数组, 其每1个元素都是一个一维数组.
二维数组
int a[][] = new int[2][5];
以上二维数组可以看成一个两行五列的数组
多维数组的使用
package com.ntru.demo.test.array;public class ArrayDemo05 {public static void main(String[] args) {//[4][2] 面向对象/*1,2 array[0]2,3 array[1]3,4 array[2]4,5 array[3]*/int[][] array = {{1,2},{2,3},{3,4},{4,5}};System.out.println(array[2][0]);System.out.println(array[2][1]);System.out.println(array.length);System.out.println(array[0].length);for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[i].length; j++) {System.out.println(array[i][j]);}}}
}
Arrays类
- 数组的工具类 java.util.Arrays
- 由于数组对象本身并没有什么方法可以供我们调用, 但API中提供了一个工具类Arrays供我们使用, 从而可以对数据对象进行一些基本操作.
- 查看JDK帮助文档
- Arrays类中的方法都是static修饰的静态方法, 在使用的时候可以直接使用类名进行调用, 而"不用"使用对象来调用(注意: 是"不用"而不是"不能")
- 具有以下常用功能
- 给数组赋值: 通过fill方法
- 给数组排序: 通过sort方法, 按升序
- 比较数组, 通过equals方法比较数组中元素值是否相等
- 查找数组元素: 通过binarySearch方法能对排序好的数组进行二分查找操作
package com.ntru.demo.test.array;import java.util.Arrays;public class ArrayDemo06 {public static void main(String[] args) {int[] a = {1,2,3,9999,31231,543,21,3,23};System.out.println(a);//[I@6d6f6e28//打印数组元素Arrays.toStringSystem.out.println(Arrays.toString(a));Arrays.sort(a);//数组进行排序 升序System.out.println(Arrays.toString(a));Arrays.fill(a,2,4,0);//2 4 被0填充Arrays.fill(a,0);//数组填充, 将0填充System.out.println(Arrays.toString(a));}public static void printArray(int[] a){for (int i = 0; i < a.length; i++) {if(i==0){System.out.print("[");//不换行}if(i==a.length-1){System.out.print(a[i]+"]");}else{System.out.print(a[i]+",");}}}
}
冒泡排序
- 冒泡排序无疑是最出名的排序算法之一, 总共有八大排序.
- 冒泡排序的代码相对简单, 两层循环, 外面冒泡轮数, 里层依次比较
- 时间复杂度O(n2)
package com.ntru.demo.test.array;import java.util.Arrays;public class ArrayDemo07 {public static void main(String[] args) {int[] a = {1,4,6,7,9,25,6,7};int[] sort = sort(a);System.out.println(Arrays.toString(sort));}/*冒泡排序比较数组中, 两个相邻元素, 如果第一个数比第二个数大, 我们该交换他们的位置每一次比较 都会产生一个最大的或者最小的数下一轮可以少1次排序一次循环 知道结束*/public static int[] sort(int[] array){//定义临时变量int temp = 0;//外层循环for (int i = 0; i < array.length-1 ; i++) {boolean flag = false;//通过flag标识位减少没有意义的比较//如果如果第一个数比第二个数大则交换位置for (int j = 0; j < array.length-1 ; j++) {if(array[j+1] < array[j]){temp = array[j];array[j] = array[j+1];array[j+1] = temp;flag = true;}}if(flag==false){break;}}return array;}
}
稀疏数组
需求: 编写五子棋游戏中, 有存盘退出和续上盘的功能.
当一个数组中大部分元素为0, 或者为同一值的数组时, 可以使用稀疏数组来保存该数组.
稀疏数组的处理方式:
- 记录数组一共有几行几列, 有多少个不同值.
- 把具有不同值的元素和列及值记录在一个小规模的数组中, 从而缩小程序的规模.
package com.ntru.demo.test.array;public class ArrayDemo08 {public static void main(String[] args) {/*创建一个二维数组 11*11 0: 没有旗子 1 :黑棋 2: 白旗*/int[][] array1 = new int[11][11];array1[1][2] = 1;array1[2][3] = 2;///输出原始数组System.out.println("输出原始数组");for (int[] ints : array1) {for (int anInt : ints) {System.out.print(anInt + "\t");}System.out.println();}/*转换为稀疏数组获取有效值的个数*/int sum = 0;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (array1[i][j] != 0) {sum++;}}}System.out.println("有效值的个数: " + sum);//创建一个稀疏数组的数组int[][] array2 = new int[sum + 1][3];array2[0][0] = 11;array2[0][1] = 11;array2[0][2] = sum;//遍历二维数组 将非零的值 存放稀疏数组int count = 0;for (int i = 0; i < array1.length; i++) {for (int j = 0; j < array1[i].length; j++) {if (array1[i][j] != 0) {count++;array2[count][0] = i;array2[count][1] = j;array2[count][2] = array1[i][j];}}}//输出稀疏数组System.out.println("稀疏数组");for (int i = 0; i < array2.length; i++) {System.out.println(array2[i][0] + "\t" + array2[i][1] + "\t" + array2[i][2] + "\t");}System.out.println("-------------");System.out.println("还原");//读取稀疏数组int[][] array3 = new int[array2[0][0]][array2[0][1]];//给其中的元素还原它的值for (int i = 1; i < array2.length; i++) {array3[array2[i][0]][array2[i][1]] = array2[i][2];}//打印System.out.println();for (int[] ints : array3) {for (int anInt : ints) {System.out.print(anInt + "\t");}System.out.println();}}
}
多维数组(冒泡排序,稀疏数组)相关推荐
- 二维数组转稀疏数组,写入文件后再读取文件,将内容转回二维数组
该方法模拟的是将棋盘的位置保存到稀疏数组中,降低存储的数据量,通过写入磁盘做持久化,再读入后恢复棋盘内容. package com.moson.sparsearray;import java.io.* ...
- 数据结构学习-二维数组与稀疏数组转换
package 稀疏数组和队列;public class 稀疏数组 {public static void main(String[] args) {// TODO Auto-generated me ...
- Java实现二维数组和稀疏数组的转换
文章目录 稀疏数组 二维数组-->稀疏数组 稀疏数组-->二维数组 完整code 稀疏数组 简介:当编写的二维数组中存在很多不用的点但初始化时都赋值为0时,这个二维数组的观赏性很低并且非常 ...
- 减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现
文章目录 基本介绍 应用实例 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: ①记录数组一共有几行几列,有多少个不同的值(0除外) ...
- 二维数组转化稀疏数组
二维数组转化为稀疏数组,稀疏数组写到磁盘,读取磁盘数据文件map.data,还原为稀疏数组,稀疏数组还原为二维数组. package sparseArray;/*** 11*11二维数组转稀疏数组** ...
- 以五子棋为背景的二维数组和稀疏数组(节省空间)的转换、用io流实现本地磁盘的存储
目录 用二维数组来表示一个棋盘: 将二维数组转换为稀疏数组 1.先遍历二维数组,得到非0数据的个数 2.创建稀疏数组 3.输出稀疏数组 利用io流实现与本地文件的交互 ①.把稀疏数组存入本地文件中 ② ...
- 【二维数组与稀疏数组的相互转化】
稀疏数组 简介 一.将二维数组转化成稀疏数组 二.将稀疏数组转化为原二维数组 简介 当一个二维数组大部分是0,或者为同一个值的数组时(即有效数据远小于无效数据时),可以用稀疏数组. 具体格式如下 下标 ...
- 什么是稀疏数组?稀疏数组详解
[1]背景 如下图所示,这里有一个 15 × 15 的棋盘,如果现在要让你通过编码的方式,让你将这盘棋局保存起来,你会怎么做呢? 面对行列数据的保存,我相信大多人第一时间都会想到用二维数组进行保存. ...
- 五子棋--java数组实现稀疏数组保存棋盘
在五子棋游戏中,我们用一个二维数组来保存数据,然后将数据保存到本地文件,需要的时候恢复出来 因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据,故将二维数组转换成稀疏数组,再保存到文档中. ...
最新文章
- 「树莓派+1万块乐高」打造乐高分类器,树莓派官方转发,网友:我想借来用两天...
- UA MATH565C 随机微分方程II Wiener过程简介
- luogu P2572 [SCOI2010]序列操作
- 初探swift语言的学习笔记二(可选类型?和隐式可选类型!)
- 如何使用bootstrap实现轮播图?
- 《2021国庆出行报告》出炉:全国高速拥堵里程占比同比下降37%
- SAP License:SAP技术人员路在何方?
- 为什么使用nginx反向代理
- 基于asp.net C#中小型超市库存管理系统
- Mars《Android开发视频教程》
- 这些信用卡取现可以免除手续费!
- 用计算机如何判断闰年,php判断/计算闰年的方法小结【三种方法】
- Ubuntu 耳机和音响没有声音
- R语言使用rcauchy函数生成符合柯西分布的随机数、使用plot函数可视化符合柯西分布的随机数(Cauchy distribution)
- Surfaceview调用Camera实现拍照
- bool 和_Bool的使用
- Android BroadcastReceiver
- MySQL调优系列:慢查询记录
- 亚马逊、速卖通、wish、Lazada、shoppe、ebay、煤炉测评跟淘宝shua单区别在哪?
- C++小游戏(第四弹)
热门文章
- AOP 中必须明白的概念-切面(Aspect)
- jenkins docker脚本
- SVN目录结构及作用
- Oracle之SQL分析函数
- 区块链相关数据报表_重磅|京东云区块链数据服务(BDS)正式开源
- php html 文本域,html文本域标签属性有哪些?html文本域标签属性用法介绍
- jar打包 剔除第三方依赖以及它的依赖_为什么Spring Boot的 jar 可以直接运行?
- permission denied和linux赋值权限chmod命令
- Linux下tar.xz结尾的文件的解压方法
- Java转iOS-第一个项目总结(2)