4、冒泡排序和稀疏数组

1、冒泡排序。

package com.Macong.array;

import java.util.Arrays;

public class ArrayDemo_05 {
    //冒泡排序,从小到大。

    /*
    思路一:冒泡排序把大的数通过两两比较,往后移动,直到最大的数出现在最后的位置。i为轮数,j为每轮比较的次数。
    1、n个数,第一轮,两两比较n-1次。
    2、n个数应该进行n-1轮比较,也就是length-1次。
    3、每一轮的比较次数为length-i次,如果arrays[j]大于arrays[j + 1]。那么换位,把大的往后拿。
     */

    /*
    思路二:
    1、比较数组中,两个相邻的元素,如果第一个数比第二个大,我们就交换他的位置
    2、每次比较,都会产生出一个最大的或者最小的数字。
    3、下一轮则可以少一次排序。
    4、依次循环,直到结束。
     */

    public static int[] sortArrays(int[] arrays) {


        int temp = 0;
       

        //外层循环,判断要进行多少轮比较。
        for (int i = 0; i < arrays.length - 1; i++) {
         boolean flag = false;//通过flag标识位较少没有意义的比较。
            //内层循环,比较判断两个数,如果前一个比后一个大,交换位置。
            for (int j = 0; j < arrays.length - 1 - i; j++) {

                if (arrays[j] > arrays[j + 1]) {
                    temp = arrays[j];
                    arrays[j] = arrays[j + 1];
                    arrays[j + 1] = temp;
                    flag = true;

                }
            }
            //没有进行任何比较,说明已经有序了。
            if (flag == false) {
                break;
            }
        }


        return arrays;
    }


    public static void main(String[] args) {
        int[] arrays = {1, 9, 9, 5, 0, 8, 0, 6, 3, 2, 7, 1};
        //排序过的数组如下。
        System.out.println(Arrays.toString(sortArrays(arrays)));


    }
}

2、稀疏数组

原来的数组创建及打印

//创建一个二维数组,11*11   0没有棋子。1:黑棋。2:白棋。


        int[][] arrays = new int[11][11];
        arrays[1][2] = 1;//2行3列放黑棋
        arrays[2][3] = 2;//3行4列放白棋

        System.out.println("输出原始的数组:");
       // System.out.println(Arrays.toString(arrays));
        //数组名字.for。跳出增强的for


        //先按照行来取一维数组的名字,再将每个一维数组遍历。看成数组的嵌套。
        for (int[] array : arrays) {
            for (int i : array) {
                System.out.print(i+"\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 (arrays[i][j]!=0)
                {

                    sum++;
                }

            }
        }
        System.out.println("有效值个数为:"+sum);

矩阵稀疏操作及打印

 int[][] array_01 = new int[sum+1][3];

        array_01[0][0]=11;//行的范围
        array_01[0][1]=11;//列的范围
        array_01[0][2]=sum;//有效数字个数

        int count = 0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (arrays[i][j]!=0)
                {
                    count++;
                    array_01[count][0]=i;
                    array_01[count][1]=j;
                    array_01[count][2]=arrays[i][j];

                }

            }
        }



        System.out.println("稀疏过后的矩阵:");
        for (int[] array : array_01) {
            for (int i : array) {
                System.out.print(i+"\t");
            }
            System.out.println();
        }


        System.out.println("===============================================");

矩阵的还原及打印

 System.out.println("稀疏数组还原。");
        int[][] arrays_2 = new int[array_01[0][0]][array_01[0][1]];

        int column = 0;//列
        int row = 0;//行
        int value = 0;//值
        int j=0;

        for (int i = 1; i <= array_01[0][2]; i++) {



                row = array_01[i][j];
                j++;
                column = array_01[i][j];
                j++;
                arrays_2[row][column]=array_01[i][j];
                j =0;
            }

        System.out.println("===============================================");

        System.out.println("还原的矩阵:");
        for (int[] array : arrays_2) {
            for (int i : array) {
                System.out.print(i+"\t");
            }
            System.out.println();
        }


完整代码

package com.Macong.array;

import java.util.Arrays;

public class ArrayDemo_06 {
    public static void main(String[] args) {
//创建一个二维数组,11*11   0没有棋子。1:黑棋。2:白棋。


        int[][] arrays = new int[11][11];
        arrays[1][2] = 1;//2行3列放黑棋
        arrays[2][3] = 2;//3行4列放白棋

        System.out.println("输出原始的数组:");
       // System.out.println(Arrays.toString(arrays));
        //数组名字.for。跳出增强的for


        //先按照行来取一维数组的名字,再将每个一维数组遍历。看成数组的嵌套。
        for (int[] array : arrays) {
            for (int i : array) {
                System.out.print(i+"\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 (arrays[i][j]!=0)
                {

                    sum++;
                }

            }
        }
        System.out.println("有效值个数为:"+sum);

        System.out.println("===============================================");

        int[][] array_01 = new int[sum+1][3];

        array_01[0][0]=11;//行的范围
        array_01[0][1]=11;//列的范围
        array_01[0][2]=sum;//有效数字个数

        int count = 0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (arrays[i][j]!=0)
                {
                    count++;
                    array_01[count][0]=i;
                    array_01[count][1]=j;
                    array_01[count][2]=arrays[i][j];

                }

            }
        }



        System.out.println("稀疏过后的矩阵:");
        for (int[] array : array_01) {
            for (int i : array) {
                System.out.print(i+"\t");
            }
            System.out.println();
        }


        System.out.println("===============================================");

        System.out.println("稀疏数组还原。");
        int[][] arrays_2 = new int[array_01[0][0]][array_01[0][1]];

        int column = 0;//列
        int row = 0;//行
        int value = 0;//值
        int j=0;

        for (int i = 1; i <= array_01[0][2]; i++) {



                row = array_01[i][j];
                j++;
                column = array_01[i][j];
                j++;
                arrays_2[row][column]=array_01[i][j];
                j =0;
            }

        System.out.println("===============================================");

        System.out.println("还原的矩阵:");
        for (int[] array : arrays_2) {
            for (int i : array) {
                System.out.print(i+"\t");
            }
            System.out.println();
        }



    }
    }

结果展示

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值