Day 21

java数组08.09

冒泡排序

  1. package array;
    
    import java.util.Arrays;
    
    public class array_Demo06 {
        //      冒泡排序法
        public static void main(String[] args) {
            int[] arrays_1 = {2,1,2,3,11,6,4,9,6,7};
            int[] bubbleSort_Arrays = bubbleSort(arrays_1);
            System.out.println(Arrays.toString(bubbleSort_Arrays));
    
        }
    
        public static int[] bubbleSort(int[] arrays){
            int[] reSort = new int[arrays.length];
                for (int i = 1; i < arrays.length; i++) {
                     if (arrays[i-1] > arrays[i]) {
                         reSort[0] = arrays[i-1] ; //   将较大的值先寄存到数组 reSort[0] 中
                         arrays[i-1] = arrays[i];
                         arrays[i] = reSort[0];
                     }
                }
    
            return arrays;
        }
    }
    ==========================================
    [1, 2, 2, 3, 6, 4, 9, 6, 7, 11]
    
    Process finished with exit code 0
    

稀疏数组

  1. 当一个数组中的大部分元素都是0,或者是为统一数值的数组是,可以使用稀疏数组来保存该数组。

  2. 稀疏数组的处理方式是:

    • 记录数组一共有几行几列,有多少不同值
    • 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
  3. package array;
    
    public class array_Demo07 {
        //    稀疏数组
        public static void main(String[] args) {
            int[][] array_1 = new int [9][8];   //  定义一个9行8列且有2个不为零的值的二维数组
            array_1[1][2] = 3;
            array_1[2][3] = 4;
            print_2ndArray(array_1);
            System.out.println("----------------------");
            //   接下来创建稀疏数组
            print_2ndArray(sparseArrays(array_1));
            System.out.println("-------自定义的稀疏数组-------");
            //   输入稀疏数组,反解压出原数组
            int[][] sparseArrays_1 = {{8,9,3},{1,1,5},{2,2,6},{3,3,7}};  //  自定义一个稀疏数组
            print_2ndArray(sparseArrays_1);
            System.out.println("-------解压后的原数组--------");
            print_2ndArray(un_sparseArrays(sparseArrays_1));
            //  用array_1创建的稀疏数组看看能不能解压出原数组
            System.out.println("---------调试数组-----------");
            print_2ndArray(un_sparseArrays(sparseArrays(array_1)));
    
        }
    
        public static void print_2ndArray( int[][] arrays){
            for (int i = 0 ;  i < arrays.length  ;  i++){
                for (int j = 0; j < arrays[i].length; j++) {
                    //   arrays.length 表示行数
                    //   arrays[i].length 表示改行的列数
                    System.out.print(arrays[i][j]+"  ");
                    if (arrays[i].length-1 == j ){
                        System.out.print("\n");
                    }
                }
    
            }
        }
        public static int[][] sparseArrays(int[][] arrays){
    
            int sum  = 0;
            for (int i = 0; i < arrays.length ; i++) {
                for (int j = 0; j < arrays[i].length; j++) {
                    //  检测数组中非0的值,并统计值的个数
                    if ( arrays[i][j] != 0 ){
                        System.out.print(arrays[i][j]+" ");
                        sum++;
                    }
                }
            }
            System.out.println("该数组非0值有"+sum+"个");
            int[][] result = new int[sum+1][3];
            //   打印稀疏数组的第一行
            result[0][0] = arrays.length;
            result[0][1] = arrays[0].length;
            result[0][2] = sum;
            int n = 1;
            for (int i = 0; i < arrays.length; i++) {
                for (int j = 0; j < arrays[i].length; j++) {
                    if ( arrays[i][j] != 0 ){
                        int m = 0;
                        result[n][m] = i;
                        m++;
                        result[n][m] = j;
                        m++;
                        result[n][m] = arrays[i][j];
                        n++;
                     }
                }
            }
            return result;
        }
    
        public static int[][] un_sparseArrays(int[][] arrays){
            int[][] result = new int[arrays[0][0]][arrays[0][1]];  // 定义解压出的result[][]数组的横纵坐标
            int n = 0;
            int m = 0;
            for (int i = 1; i < arrays.length; i++) {
                n = arrays[i][0];
                m = arrays[i][1];
                result[n][m] = arrays[i][2];
            }
            return result;
        }
    }
    =============================================
    0  0  0  0  0  0  0  0  
    0  0  3  0  0  0  0  0  
    0  0  0  4  0  0  0  0  
    0  0  0  0  0  0  0  0  
    0  0  0  0  0  0  0  0  
    0  0  0  0  0  0  0  0  
    0  0  0  0  0  0  0  0  
    0  0  0  0  0  0  0  0  
    0  0  0  0  0  0  0  0  
    ----------------------
    3 4 该数组非0值有29  8  2  
    1  2  3  
    2  3  4  
    -------自定义的稀疏数组-------
    8  9  3  
    1  1  5  
    2  2  6  
    3  3  7  
    -------解压后的原数组--------
    0  0  0  0  0  0  0  0  0  
    0  5  0  0  0  0  0  0  0  
    0  0  6  0  0  0  0  0  0  
    0  0  0  7  0  0  0  0  0  
    0  0  0  0  0  0  0  0  0  
    0  0  0  0  0  0  0  0  0  
    0  0  0  0  0  0  0  0  0  
    0  0  0  0  0  0  0  0  0  
    ---------调试数组-----------
    3 4 该数组非0值有20  0  0  0  0  0  0  0  
    0  0  3  0  0  0  0  0  
    0  0  0  4  0  0  0  0  
    0  0  0  0  0  0  0  0  
    0  0  0  0  0  0  0  0  
    0  0  0  0  0  0  0  0  
    0  0  0  0  0  0  0  0  
    0  0  0  0  0  0  0  0  
    0  0  0  0  0  0  0  0  
    
    Process finished with exit code 0
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值