07-实现冒泡排序

冒泡排序的实现

  • 冒泡排序比较简单,如下所示

  • import java.util.Arrays;
    import java.util.Random;
    import java.util.Scanner;
    
    public class BubbleSort {
    
        public static void main(String[] args) {
            // 随机生成(1-100)的指定长度的数组
            Scanner scanner = new Scanner(System.in);
            System.out.print("请输入指定的数组长度:");
            int[] arr = randomArr(scanner.nextInt());
            System.out.println("源数组: arr = " + Arrays.toString(arr));
    
            bubbleSort(arr);
    
            System.out.println("---------------------------------");
            System.out.println("冒泡排序后的数组为:arr = " + Arrays.toString(arr));
    
        }
    
        private static void bubbleSort(int[] arr) {
            /*
                冒泡排序原理:
                    每一轮排序,从第一个开始,两两比较,大的放后面
                    每一次比较结束后,指针往后移动一位
             */
            // 排序的最大轮数为 arr.length - 1,即长度为4的最大排序轮数为3轮
            for (int i = 0; i < arr.length - 1; i++) {
                System.out.println("----------当前为第[" + (i + 1) + "]轮排序----------");
                // 每次比较次数,跟轮数有关,每一轮排序结束后,需要比较的数字都会 -1
                // 又因为第一次比较的次数为 arr.length - 1
                // 所以可以得出规律 每次比较的次数为 arr.length - 1 - i
                int temp = 0;   // 用作两两交换
                int times = 0;  // 作为记录每轮的中的比较后两数的交换次数,如果该轮比较后两数的交换次数为0,那么此时的数组就已经为升序排序了
                for (int j = 0; j < arr.length - 1 - i; j ++) {
                    System.out.println("第[" + (j + 1) + "]次比较中比较的两个数字为:" + arr[j] + "," + arr[j + 1]);
                    if (arr[j] > arr[j + 1]) {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                        times ++;
                    }
                }
                System.out.println("本轮排序结束后的数组为:" + Arrays.toString(arr));
                if (times == 0) {
                    return;
                }
            }
    
        }
    
        private static int[] randomArr(int length) {
            Random random = new Random();
            System.out.print("请输入数组的长度:");
            int[] arr = new int[length];
            for (int i = 0; i < arr.length; i++) {
                arr[i] = random.nextInt(101) + 1;
            }
            return arr;
        }
    }
    
    
posted @ 2022-08-06 14:32  OnlyOnYourself-Lzw  阅读(16)  评论(0编辑  收藏  举报