JAVA复习(二维数组——快排——迷宫)

二维数组: (了解)

 

定义: 一维数组:  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);

     }

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值