Java数组练习冒泡排序

1、有10个数字要求分别用选择法和冒泡法从大到小输出

选择法:

public class Task011 {

    public static void main(String[] args) {
        /*
        * 有10个数字要求分别用选择法和冒泡法从大到小输出
        * */
        //先用选择发从大到小输出
        //初始化一个长度为10的数组
        int[] array = {10,32,53,54,65,7,76,43,34,88};

        for (int i=0;i<array.length;i++){
            //假设第一个数为最大值
             int max = array[i];
             int a = i; //记录下标
            for (int j=i;j< array.length;j++){
                if (array[j]>max){
                    max = array[j];
                    a = j;
                }
            }
            System.out.print(max+" ");
            int temp = array[i];
            array[i] = array[a];
            array[a] = temp;
        }
        System.out.println();
    }
}

冒泡法:

public class Task012 {

    public static void main(String[] args) {
        /*
        * 有10个数字要求分别用选择法和冒泡法从大到小输出
        * */
        //用选择发从大到小输出
        //初始化一个长度为10的数组
        int[] array = {10,32,53,54,65,7,76,43,34,88};

        for (int i=0;i<array.length-1;i++){
            for (int j=0;j<array.length-1-i;j++){
                if (array[j]<array[j+1]){
                    int temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            }
        }

        //输出数组
        for (int i=0;i<array.length;i++){
            System.out.print(array[i]+" ");
        }
        System.out.println();
    }

}

2、求一个3*3矩阵对角线元素之和

<提示>程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

public class Task02 {

    public static void main(String[] args) {
        /*
        *   求一个3*3矩阵对角线元素之和
        * <提示>程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
        * */

        //创建一个Scanner类对象
        Scanner sc = new Scanner(System.in);
        //创建一个3*3的二维数组
        int[][] array = new int[3][3];

        //用户输入数据
        for (int i=0;i< array.length;i++){
            System.out.println("------------请输入第"+(i+1)+"行数据------------");
            for (int j=0;j<array[i].length;j++){
                System.out.println("第"+(j+1)+"个");
                array[i][j] = sc.nextInt();
            }
        }
        //输出二维数组且三行三列,并且获取对角线的数
        //获取的数进行相加
        int nums = 0;
        for (int i=0;i<array.length;i++){
            for (int j=0;j< array.length;j++){
                if (i==j||i+j==2){
                    nums += array[i][j];
                }
                System.out.print(array[i][j]+"\t");
            }
            System.out.println();
        }
        System.out.println("对角线累加之和为:"+nums);
    }
}

3、有一个已经按升序排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

<提示>程序分析:首先判断此数第一次小于数组中哪个元素,然后将此数插入,插入后此元素之后的数,依次后移一个位置。

public class Task03 {

    public static void main(String[] args) {
        /*
        * 有一个已经按升序排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
        * <提示>程序分析:首先判断此数第一次小于数组中哪个元素,然后将此数插入,插入后此元素之后的数,依次后移一个位置。
        * */

        //创建一个Scanner类对象
        Scanner sc = new Scanner(System.in);

        //创建一个已经升序好的数组并输出
        int[] array = {11,23,54,64,75,89,93,99};
        System.out.println(Arrays.toString(array));

        //首先创建一个比原来的大一的数组,并将元素赋值到新的数组中
        int[] newArray = Arrays.copyOf(array,array.length+1);

        //用户输入要插入数组中的数字
        System.out.println("请输入你要插入的数字:");
        int insertNum = sc.nextInt();

        //获取要插入位置的下标值
        int getLocation = newArray.length-1;
        for (int i=0;i<newArray.length;i++){
            if (insertNum<newArray[i]){
                getLocation = i;
                break;
            }
        }

        //将获取下标后面的值依次往后移(注意:要从后向前移动)
        for (int i=newArray.length-1;i>getLocation;i--){
            newArray[i] = newArray[i-1];
        }

        //最后将要插入的值赋予对应的位置并输出
        newArray[getLocation] = insertNum;
        System.out.println(Arrays.toString(newArray));

    }

}

4、输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

public class Task04 {

    public static void main(String[] args) {
        /*
        * 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
        * */

        //创建一个Scanner类对象
        Scanner sc = new Scanner(System.in);

        //创建一个数组
        int[] array = new int[6];
        //输入数组的值
        for (int i=0;i< array.length;i++){
            //用户输入值
            System.out.println("请输入数组的值:");
            array[i] = sc.nextInt();
        }
        //交换前的数组为
        System.out.println("输出交换前的数组:");
        System.out.println(Arrays.toString(array));

        //获取最大值,先假设第一个数为最大值
        int max = array[0];
        int subscriptMax = 0; //记录下标
        for (int i=1;i<array.length;i++){
            if (array[i]>max){
                max = array[i];
                subscriptMax = i;
            }
        }

        //最大值与第一个交换
        array[subscriptMax] = array[0];
        array[0] = max;

        //获取最小值,先假设第一个数为最小值
        int min = array[0];
        int subscriptMin = 0; //记录下标
        for (int i=1;i< array.length;i++){
            if (array[i]<min) {
                min = array[i];
                subscriptMin = i;
            }
        }

        //最小值与最后一个数交换
        array[subscriptMin] = array[array.length-1];
        array[array.length-1] = min;

        //输出交换后的数组
        System.out.println("输出交换后的数组:");
        System.out.println(Arrays.toString(array));
    }
}

5、有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

public class Task05 {

    public static void main(String[] args) {
        /*
        * 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
        * */

        //创建一个Scanner类对象
        Scanner sc = new Scanner(System.in);
        //获取用户有几个整数
        System.out.println("请输入有几个整数:");
        int n = sc.nextInt();
        System.out.println("请输入你要向后移动多少位置:");
        int m = sc.nextInt();
        //创建一个数组来存储这n个整数
        int[] array = new int[n];

        //初始化数组
        for (int i=0;i< array.length;i++){
            System.out.println("请输入第"+(i+1)+"个整数:");
            array[i] = sc.nextInt();
        }
        //输出移动前的数组
        System.out.println("移动前的数组:");
        System.out.println(Arrays.toString(array));

        //移动数组
        for (int i=1;i<=m;i++){    //外层循环代表移动几个
            int temp = array[array.length-1];
            for (int j= array.length-1;j>=0;j--){    //内层循环来移动一个
                if (j==0){
                    array[j] = temp;
                }else {
                    array[j] = array[j-1];
                }
            }
        }

        //输出移动后的数组
        System.out.println("移动后的数组:");
        System.out.println(Arrays.toString(array));

    }

}

6、定义一个4行4列的二维数组,逐个从键盘输入值,然后将第1行和第4行的数据进行交换,将第2行和第3行的数据进行交换

public class Task06 {

    public static void main(String[] args) {
        /*
        * 定义一个4行4列的二维数组,逐个从键盘输入值,然后将第1行和第4行的数据进行交换,将第2行和第3行的数据进行交换
        * */
        //创建一个Scanner类对象
        Scanner sc = new Scanner(System.in);
        //声明一个4行4列的二维数组并赋值
        int[][] array = new int[4][4];
        for (int i=0;i<array.length;i++){
            System.out.println("--------------请输入第"+(i+1)+"行数据--------------");
            for (int j=0;j< array[i].length;j++){
                System.out.println("第"+(i+1)+"行,第"+(j+1)+"个数:");
                array[i][j] = sc.nextInt();
            }
        }
        //输出交换前的数组
        System.out.println("交换前的数组:");
        for (int i=0;i<array.length;i++){
            for (int j=0;j< array.length;j++){
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }

        //交换数据
        for (int i=0;i< array.length/2;i++){
            for (int j=0;j< array[i].length;j++){
                int temp = array[i][j];
                array[i][j] = array[3-i][j];
                array[3-i][j] = temp;
            }
        }

        //输出交换后的数组
        System.out.println("交换后的数组:");
        for (int i=0;i<array.length;i++){
            for (int j=0;j< array.length;j++){
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }

    }

}

7、定义一个4行4列的二维数组,逐个从键盘输入值,将对角线的值清0

public class Task07 {

    public static void main(String[] args) {
        /*
        * 定义一个4行4列的二维数组,逐个从键盘输入值,将对角线的值清0
        * */
        //创建一个Scanner类对象
        Scanner sc = new Scanner(System.in);
        //声明一个4行4列的二维数组并赋值
        int[][] array = new int[4][4];
        for (int i=0;i<array.length;i++){
            System.out.println("--------------请输入第"+(i+1)+"行数据--------------");
            for (int j=0;j< array[i].length;j++){
                System.out.println("第"+(i+1)+"行,第"+(j+1)+"个数:");
                array[i][j] = sc.nextInt();
            }
        }

        //输出最初的数组
        System.out.println("最初的数组:");
        for (int i=0;i<array.length;i++){
            for (int j=0;j< array[i].length;j++){
                System.out.print(array[i][j]+"\t");
            }
            System.out.println();
        }

        //清理数据
        for (int i=0;i< array.length;i++){
            for (int j=0;j< array[i].length;j++){
                if (i==j||i+j==3){
                    array[i][j] = 0;
                }
            }
        }

        //输出清理后的数组
        System.out.println("清理后的数组:");
        for (int i=0;i<array.length;i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + "\t");
            }
            System.out.println();
        }

    }

}

8、定义一个N*N二维数组,从键盘上输入值,找出每行中最大值组成一个一维数组并输出;

public class Task08 {

    public static void main(String[] args) {
        /*
        * 定义一个N*N二维数组,从键盘上输入值,找出每行中最大值组成一个一维数组并输出;
        * */

        //创建一个Scanner类对象
        Scanner sc = new Scanner(System.in);
        //请输入你n*n的数组n为多少
        System.out.println("请输入你n*n的数组n为多少:");
        int n = sc.nextInt();
        //声明一个n行n列的二维数组并赋值
        int[][] array = new int[n][n];
        for (int i=0;i<array.length;i++){
            System.out.println("--------------请输入第"+(i+1)+"行数据--------------");
            for (int j=0;j< array[i].length;j++){
                System.out.println("第"+(i+1)+"行,第"+(j+1)+"个数:");
                array[i][j] = sc.nextInt();
            }
        }

        //输出最初的数组
        System.out.println("最初的数组:");
        for (int i=0;i<array.length;i++){
            for (int j=0;j< array[i].length;j++){
                System.out.print(array[i][j]+"\t");
            }
            System.out.println();
        }

        //声明一个数组用来存储每一行取出来的最大值
        int[] maxArray = new int[n];
        for (int i=0;i< array.length;i++){
            //假设每一行的第一个数为最大值
            int max = array[i][0];
            for (int j=0;j< array[i].length;j++){
                if (array[i][j]>max){
                    max = array[i][j];
                }
            }
            maxArray[i] = max;
        }

        //输出取出的最大值
        System.out.println("每一行的最大值为:");
        System.out.println(Arrays.toString(maxArray));
    }
}

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值