二维数组: (了解)
定义: 一维数组: int[] array=new int[3] ;开辟了3个空间的int类型的数组
二维数组: int[][]
对于二维数组的初始化定义:
数组的动态初始化:
数据类型 数组名称[][]=new 数据类型[行][列];
数组的静态初始化
数据类型 数组名称[][]=new 数据类型[][]{{1,2,3},{4,5,6},{7,8,9}};
范例:定义二维数组
//静态初始化 二维数组 int data[][]=new int[][] {{1,2,3},{4,5,6},{7,8,9}};
System.out.println(data[1][2]); |
对于二维数组的访问第一个[] 代表外围的数组 第二个[] 里层数组的元素
范例:二维数组的遍历
public static void main(String[] args) {
//静态初始化 二维数组
int data[][]=new int[][] {{1,2,3},{4,5,6},{7,8,9}};
for(int i=0;i<data.length;i++) {
for(int x=0;x<data[i].length;x++) {
System.out.print(data[i][x]+"、"); } System.out.println(); } } |
用二维数组定义一个迷宫地图 ,找出迷宫地图中存在的出路
二维数组地图的代码:
int[][] maze={ {2,2,2,2,2,2,2,2,2}, {2,0,0,0,0,0,0,0,2}, {2,0,2,2,0,2,2,0,2}, {2,0,2,0,0,2,0,0,2}, {2,0,2,0,2,0,2,0,2}, {2,0,0,0,0,0,2,0,2}, {2,2,0,2,2,0,2,2,2}, {2,0,0,0,0,0,0,0,2}, {2,2,2,2,2,2,2,2,2} }; |
快速排序:
分治算法 分半 找到一个中间值
key
13 45 6 9 43 12 key 左边的 都比key 小 右边的都比key大
范例:实现快速排序
package org.arry; import java.util.Arrays; public class QuickSort {
public static void main(String[] args) {
int[]array=new int[] {49,38,65,97,76,13,27,49};
quickSort(array, 0, array.length-1);
}
public static void quickSort(int[]array,int low,int high) {
if(low<high) {
int mid=partition(array, low, high); //取得分区结果
quickSort(array, low, mid-1);
quickSort(array, mid+1, high); } }
//分区
public static int partition(int[]array ,int low,int high) {
//1 取得关键key
//2 设置 左右下标 i=0 j=length-1;
// 把数组中的第一个元素作为关键字
int key=array[low];
int i=low, j=high;
if(low<high) {
//从J开始向左找 while(i<j) {
while(i<j&&array[j]>=key) { j--; }
if(i<j) {
array[i]=array[j]; i++; }
while(i<j&&array[i]<=key) {
i++; } if(i<j) {
array[j]=array[i];
j--; } }
array[i]=key;
System.out.println("每次排序的结果="+Arrays.toString(array)); }
return i; } }
|
迷宫出口:
package org.arry;
public class Maze {
//入口坐标和出口坐标
private static int startPosI;
private static int startPosJ;
//出口的坐标
private static int endPosI;
private static int endPosJ;
//设置入口的坐标 public void setStart(int startPosI,int startPosJ) {
this.startPosI=startPosI;
this.startPosJ=startPosJ; }
//设置出口的坐标
public void setEnd(int endPosI,int endPosJ) {
this.endPosI=endPosI;
this.endPosJ=endPosJ; }
public static void visPos(int[][] cell,int i,int j) {
cell[i][j]=1;
if(i==endPosI&&j==endPosJ) { //找到出口了
System.out.println("找到了一条出口");
for(int m=0;m<cell.length;m++) {
for(int n=0;n<cell[0].length;n++) {
if(cell[m][n]==2) {
System.out.print("2");
}else if(cell[m][n]==1) {
System.out.print("*"); }else {
System.out.print(" "); } } System.out.println(); } } //向左边寻找通路 if(cell[i][j-1]==0) {
visPos(cell, i, j-1); } //向右边寻找通路
if(cell[i][j+1]==0) {
visPos(cell, i, j+1); }
//向上找 if(cell[i-1][j]==0) {
visPos(cell, i-1, j); }
//向下找
if(cell[i+1][j]==0) {
visPos(cell, i+1, j); }
cell[i][j]=0; }
public static void main(String[] args) {
int[][] maze={ {2,2,2,2,2,2,2,2,2}, {2,0,0,0,0,0,0,0,2}, {2,0,2,2,0,2,2,0,2}, {2,0,2,0,0,2,0,0,2}, {2,0,2,0,2,0,2,0,2}, {2,0,0,0,0,0,2,0,2}, {2,2,0,2,2,0,2,2,2}, {2,0,0,0,0,0,0,0,2}, {2,2,2,2,2,2,2,2,2} };
Maze m=new Maze();
m.setStart(1, 1);
m.setEnd(7, 7);
m.visPos(maze, 1, 1); } }
|