> 文档中心 > [JavaSE] 数组的定义和使用(三)

[JavaSE] 数组的定义和使用(三)

目录

数组练习

💬 检查数组的有序性

💬 数组排序(冒泡排序)

💬 数组逆置

💬 数组数字排列

💬 填充数组

二维数组

基本定义

不规则二维数组


上一篇


    

疫情当前,大家要做好防护哦。

带好口罩了嘛?

那么大家跟着Nick来学习数组(三)的知识!

        

数组练习

💬 检查数组的有序性

  

🔴 给定一个整型数组, 判断是否该数组是有序的(升序)

   

public class 判断有序 {    public static void main(String[] args) { int[] arr={1,2,2}; System.out.println(isJudge(arr));    }    public static boolean isJudge(int[] arr){ for (int i = 0; i arr[i+1]){  return  false;     } } return true;    }}

   

💬 数组排序(冒泡排序)

   

🔴 给定一个数组, 让数组升序 (降序) 排序

  

🔴 每次尝试找到当前待排序区间中最小(或最大)的元素, 放到数组最前面(或最后面)

    

基础版本:

    public static void main(String[] args) { int[] arr = {9, 5, 2, 7}; bubbleSort(arr); System.out.println(Arrays.toString(arr));    }    public static void bubbleSort(int[] arr) {// [0, bound) 构成了一个前闭后开区间, 表示已排序区间// [bound, length) 构成了一个前闭后开区间, 表示待排序区间// 每循环一次, 就找到一个合适大小的元素, 已排序区间就增大1. for (int bound = 0; bound  bound; cur--) {  if (arr[cur - 1] > arr[cur]) {      int tmp = arr[cur - 1];      arr[cur - 1] = arr[cur];      arr[cur] = tmp;  }     } } // end for    } // end bubbleSort}// 执行结果[2, 5, 7, 9]

      

改进版本:

import java.util.Arrays;//一步一步向后走,关键:一趟走完,发现没交换,说明已经有序了public class 冒泡 {    public static void main(String[] args) { int[] arr={0,1,2,4,2,5,7}; bubbleSort(arr); System.out.println(Arrays.toString(arr));    }    public static void bubbleSort(int[] arr) { for (int i = 0; i < arr.length-1; i++) {     boolean flag=false;     for (int j = 0; j arr[j+1]){      int temp = arr[j];      arr[j] = arr[j+1];      arr[j+1] = temp;      flag =true;  }     }     if(flag==false){  break;     } }    }}

    

🔴 冒泡排序性能较低. Java 中内置了更高效的排序算法

    

    public static void main(String[] args) { int[] arr = {9, 5, 2, 7}; Arrays.sort(arr); System.out.println(Arrays.toString(arr));    }

    

🔴 关于 Arrays.sort 的具体实现算法, Nick在数据结构的栏目详细介绍过了,介绍了很多种常见排序算法,大家感兴趣可以看一下。

    

💬 数组逆置

  

🔴 给定一个数组, 将里面的元素逆序排列.

🔴 设定两个下标, 分别指向第一个元素和最后一个元素. 交换两个位置的元素. 然后让前一个下标自增, 后一个下标自减, 循环继续即可

       

import java.util.Arrays;public class 数组逆置 {    public static void main(String[] args) { int[] arr = {1,2,3,4,5,6}; reverse(arr); System.out.println(Arrays.toString(arr));    }    public static void reverse(int[] arr){ int left = 0; int right = arr.length-1; while(left<right){     int temp = arr[left];     arr[left] = arr[right];     arr[right] = temp;     left++;     right--; }    }}

      

💬 数组数字排列

  

🔴 给定一个整型数组, 将所有的偶数放在前半部分, 将所有的奇数放在数组后半部分

    

例如 {1, 2, 3, 4} 调整后得到 {4, 2, 3, 1}

     

🔴 设定两个下标分别指向第一个元素和最后一个元素。 用前一个下标从左往右找到第一个奇数, 用后一个下标从右往左找到第一个偶数, 然后交换两个位置的元素.。依次循环即可.

      

import java.util.Arrays;public class 偶前奇后 {    public static void main(String[] args) { //在数组里偶数在前,奇数在后(不分顺序) Integer[] arr ={5,7,9,2,3,4,1,8,10,3}; sort(arr); System.out.println(Arrays.toString(arr));    }    public static void sort(Integer[] arr){ int left = 0; int right=arr.length-1; while(left<right){     // 该循环结束, left 就指向了一个奇数     while(left < right && arr[left] % 2 == 0){  left++;     }     // 该循环结束, right 就指向了一个偶数     while(left < right && arr[right]%2==1){  right--;     }     //这里就是单纯换个位置,可以写代码直接实现,Nick习惯写方法了,哈哈     exch(arr,left,right); }    }    public static void exch(Comparable[] arr,int x,int y){ Comparable temp; temp = arr[x]; arr[x] = arr[y]; arr[y] = temp;    }}

  

    

💬 填充数组

🔴 往数组中填充5个10

   

import java.util.Arrays;public class 填充 {    public static void main(String[] args) { int[] arr =new int[10]; //数组填充 //首索引 尾索引 填充值     Arrays.fill(arr,0,5,12); //范围左闭右开[0,5)     System.out.println(Arrays.toString(arr));    }}

      

   

   

🔴 往数组中赋值1-100

   

public class 数组1到100 {    public static void main(String[] args) { int[] arr = new int[100]; int sum=0; for (int i = 0; i < arr.length; i++) {     arr[i]=++sum; }    }}

    

二维数组

基本定义

   

🔴 二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组

     

基本语法

数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 };

 //三种常见的二维数组写法 int[][] arr01=new int[][]{{1,2,3},{4,5,6}}; int[][] arr02=new int[2][3]; int[][] arr={{1,2,3},{5,7,8}}; //输出行数(原理:存一维数组的数组长度) System.out.println(arr.length); //输出列数(原理:存储在一维数组当中的数组长度) //i指的是所在行数,求的是第i行有多少列 System.out.println(arr[i].length);

  

画图理解(重要)

         

📝 三种二维数组遍历

    public static void main01(String[] args) { //int[][] arr=new int[][]{{1,2,3},{4,5,6}}; //int[][] arr=new int[2][3]; int[][] arr={{1,2,3},{5,7,8}}; //行 System.out.println(arr.length); //列 System.out.println(arr[i].length);  //遍历1 for (int i = 0; i < arr.length; i++) {     for (int j = 0; j <arr[i].length; j++) {  System.out.print(arr[i][j]+" ");     }     System.out.println(); } System.out.println("==================");  //遍历2 //ret 行 一位数组中存着n个数组 //x   列 遍历得到每一行中的列值 for (int[] ret: arr){     for (int x: ret){  System.out.print(x+" ");     }     System.out.println(); } //遍历3 System.out.println("===================="); System.out.println(Arrays.deepToString(arr));    }

🔴 二维数组的用法和一维数组并没有明显差别, 因此我们不再赘述。 同理, 还存在 "三维数组", "四维数组" 等更复杂的数组, 只不过出现频率都很低

   


不规则二维数组

  

🔴 行确定,列不确定(行必须是确定的,不懂看图,没有行怎么存储列对吧~)

   

public class 二维数组 {    public static void main(String[] args) {//打印测试/* int[][] arr={{1,2},{5,7,8}}; for (int[] ret: arr){     for (int x: ret){  System.out.print(x+" ");     }     System.out.println();    }     System.out.println("======================");*/ //不规则二维数组,行确定,列不确定     int[][] arr2=new int[2][]; //数组arr2[0]存储一个长度为1的数组     arr2[0] = new int[3]; //数组arr2[1]存储一个长度为2的数组     arr2[1] = new int[2];     for (int[] str:arr2){  for (int s:str){      System.out.print(s+" ");  }  System.out.println();     }    }

      

    

下一篇