Java数组学习004Array类,冒泡排序,稀疏数组

Arrays类

常具有以下功能

  • 给数组赋值:通过fill方法

    public static void main(String[] args) {
           int[] a ={1,2,3,23425,452534,23,3};
           Arrays.sort(a);
           System.out.println(Arrays.toString(a));
           Arrays.fill(a,0);//数组填充
           System.out.println(Arrays.toString(a));

      }

     

  • 对数组排序:通过sort方法,按升序

  • 比较数组:通过equals方法比较数组中元素值是否相等

  • 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作

    例子:

    public static void main(String[] args) {
           int[] a ={1,2,3,23425,452534,23,3};
           System.out.println(a);//[I@1b6d3586

           //打印数组元素Arrays.toString
           System.out.println(Arrays.toString(a));
           printArray(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]+",");}
               //与Arrays.toString一样
          }
    }

     

冒泡排序

1,比较数组中两个相邻的元素,如果第一个比第二个大,则交换位置

2,每一次比较,都会产生一个最大,或者最小的数字

3,下一次循环可以少一次排序

4,依次循环,直到结束

public static void main(String[] args) {
       int[] a ={1,234,2342,342,3,54};

       int[] sort = sort(a);//调用完我们自己写的排序方法以后,返回一个排序后的数组

       System.out.println(Arrays.toString(sort));
  }
   public static int[] sort(int[] array) {
       int temp = 0;//临时变量
       //外层循环,判断我们这个要走多次
       for (int i = 0; i < array.length-1; i++) {
           //内层循环,比价判断两个数,如果第一个数,比第二个数大,则交换位置
           for (int j = 0; j < array.length-1-i; j++) {
               if (array[j+1]>array[j]){//把">"改为"<"则是从小到大排序
                   temp = array[j];
                   array[j] = array[j+1];
                   array[j+1] = temp;
              }
          }
      }
       return array;
  }

稀疏数组

public static void main(String[] args) {
       //1,创建一个二维数组 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();
      }
       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.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 : array1) {
           for (int anInt : ints) {
               System.out.print(anInt + "\t");
          }
           System.out.println();
      }
  }

 

posted @ 2021-02-22 12:03  鍠钺  阅读(97)  评论(0)    收藏  举报