冒泡排序算法代码实现

上代码:

package com.liu.pro;

import java.util.Arrays;

public class bubbleSort {
    public static void main(String[] args) {
        int[] arr = {9,8,5,6,2,7,1,3,4};
        sort(arr);
        System.out.println("最初的冒泡排序算法");
        System.out.println(Arrays.toString(arr));
        sort1(arr);
        System.out.println("优化后的冒泡排序算法");
        System.out.println(Arrays.toString(arr));
    }
    /**
     * 最初的冒泡排序算法
     * @param arr 传入的数组
     */
    public static void sort(int[] arr){
//      有arr.length个数,只需要排序arr.length-1次,最后一个只有一个数,则不需要进行排序
        for (int i = 0; i < arr.length - 1; i++) {
//          从索引为0的数开始进行排序,第i轮时,已经有i个数已经排好了,arr.length - 1 (代表最大的下标)- i(已经排好的数)
            for (int j = 0; j < arr.length - 1 - i; j++) {
//              前面的数值比后面的数值大
                if (arr[j] > arr[j + 1]){
//                  交换数值
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j+1] = temp;
                }
            }
        }
    }
    /**
     * 优化后的冒泡排序算法
     * @param arr 传入的数组
     */
    public static void sort1(int[] arr){
//      利用flag进行记录是否进行了更换
        Boolean flag = false;
//      两层for循环的解释和上同
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]){
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j+1] = temp;
//                  此轮已经进行值交换
                    flag = true;
                }
            }
//          flag为true时,证明此轮已经进行过值的交换,需要进行排序
//          否则证明此轮没有进行值交换,大小则全部符合规则,那么直接退出,后面的都已经排好了
            if (flag){
                flag = false;
            }else{
                break;
            }
        }
    }
}

结果:

 

posted @ 2022-07-15 21:04  努力学习の小白  阅读(129)  评论(0编辑  收藏  举报
Live2D