08 冒泡排序

冒泡排序

image

代码

package com.zhan.base04Array;

public class Test08 {

    public static void main(String[] args) {
        int[] a={1,5,3,8,6};
        sort(a);

    }

    /* 冒泡排序
    1.比较数组中相邻的两个因素的大小,如果不相等(看情况),则交换顺序
    2.每一次比较,都会产生 最大或者最小 的一个数字  (内循环)
    3.下一轮循环可以少一次排序
    4. 依次循环,直到结束
     */
    public static void sort(int[] a){

        boolean flag=false;   // 算法的优化

        for (int i = 0,k=a.length-1; i < a.length-1; i++,k--) {
            // 外循环决定每一次内循环后选出最大或者最小值的轮数  执行 a.length-1 次,下一次循环可少一次排序
            for (int j = 0; j <k ; j++) {   //内循环决定排序   每一次外循环后,内循环都会减少一次排序
                if (a[j]>a[j+1]){     // 升序
                    int temp;
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                    flag=true;
                    // 如果if语句没有被执行,那么flag==false,则说明原本的顺序就已经排好了,就可以跳出循环,节省资源
                }
            }
            if (flag==false)  break;
        }



        /*    狂神讲的 ,都一样,使得内循环每次排序的次数减1即可
                for (int i = 0; i < a.length-1; i++) {
            for (int j = 0; j < a.length-1-i; j++) {

            }
        }
         */


        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
        }
        System.out.println();
    }


}
posted @ 2023-01-27 17:51  被占用的小海海  阅读(17)  评论(0)    收藏  举报