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

本文介绍了如何在Java中使用选择法和冒泡法对10个随机生成的整数数组进行从大到小排序,详细展示了选择排序和冒泡排序的过程以及关键代码实现。
摘要由CSDN通过智能技术生成

/*
* 有10个数字要求分别用选择法和冒泡法从大到小输出
* */
public static void main(String[] args) {
    /*
     *
     * 思路:
     *   1、随机生成十个数字
     *   2、选择排序
     *   3、冒泡排序
     *
     * */


    //随即生成10个数字(0~20)存入数组中
    Random random = new Random();
    int[] arr = new int[10];
    System.out.println("初始数组:");
    for (int i = 0; i < arr.length; i++) {
        arr[i] = random.nextInt(21);
        System.out.print(arr[i] + " ");
    }
    System.out.println();


    //选择排序 每次排序结束 自变量自加 数组长度自减
    //初始化左右两边的索引
    int maxLeft = 0;
    int minRight = arr.length - 1;
    while (minRight > maxLeft) {
        //同时选择最大值和最小值 并初始化 假设最大值时第一个 最小值是最后一个
        //初始化最小值和最大值的索引
        int minIndex = minRight;
        int maxIndex = maxLeft;
        for (int i = maxLeft; i <= minRight; i++) {//这里千万要调用外部变量 不要调用循环内的变量,不然会意外退出


            if (arr[maxIndex] < arr[i]) {
                maxIndex = i;
            }
            if (arr[minIndex] > arr[i]) {
                minIndex = i;
            }


        }


        /*
         * 在这里有个不需要注意的点:
         *   有的同学比较好奇,为什么不把最大最小值的交换放在if判断语句里
         *   因为for循环里面有两个判断语句,会相互影响
         *   选择排序的核心思想是每次从未排序的部分中选择最小(或最大)的元素,并将其放置在已排序部分的末尾。
         * 在选择排序的实现中,我们需要使用一个临时变量来存储最小元素的值,并将其与当前位置的元素进行交换。
         * 选择排序的互换操作不能写在if语句里,因为if语句只是用来判断最小元素的位置,并不会进行实际的交换操作。
         * 如果我们将互换操作写在if语句里,那么每次判断都会进行一次交换操作,这样会导致排序结果错误。
         *


         * */
        //存储最大值在最左端
        int temp = arr[maxIndex];
        arr[maxIndex] = arr[maxLeft];
        arr[maxLeft] = temp;


        if (minIndex == maxLeft) {
            minIndex = maxIndex;
        }


        //存储最小值在最右端
        temp = arr[minIndex];
        arr[minIndex] = arr[minRight];
        arr[minRight] = temp;


        minRight--;
        maxLeft++;
    }
    System.out.println("选择排序:");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + " ");
    }
    System.out.println();




    //冒泡排序
    for (int i = 0; i < arr.length - 1; i++) {
        for (int j = 0; j < arr.length - 1; j++) {
            if (arr[j] < arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    System.out.println("冒泡排序:");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + " ");
    }


}
这里我将两种排序写在一起了,如果想要验证只需要将另一个代码段注释掉即可
输出结果:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值