java排序算法之冒泡排序算法

排序算法之冒泡排序算法

冒泡排序

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

原理

  1. 首先定义一个数组
    在这里插入图片描述

  2. 把它像冒泡一样排序

第一次   132 相比  1<32  不动      故数组为 {1, 32, 5, 75, 3, 4, 88} 未发生变化
第二次  325  相比  32>5  调换位置  故数组为 {1, 5, 32, 75, 3, 4, 88} 532 调换位置 大的在右边 冒泡继续向上升
第三次  3275 相比  32<75 不动      故数组为 {1, 5, 32, 75, 3, 4, 88} 未发生变化
第四次  753 相比  75>3 调换位置    故数组为 {1, 5, 32, 3, 75, 4, 88} 375 调换位置 大的在右边 冒泡继续向上升
第五次  754 相比  75>4 调换位置    故数组为 {1, 5, 32, 3, 4, 75, 88} 475 调换位置 大的在右边 冒泡继续向上升
第六次  7588 相比  75<88 不动      故数组为 {1, 5, 32, 3, 4, 75, 88} 未发生变化
第一轮结束 出现最大的 88 在最后 第二轮开始 继续这样相比
。。。。。。。
第二轮结束 :数组为  {1, 5, 3, 4, 32, 75, 88} 第二大出现 :75 内排序次数会减一 因为出现最大的数字了
第三轮结束 :数组为  {1, 3, 4, 5, 32, 75, 88} 第三大出现 :32 内排序次数会减一 因为出现最大的数字了
。。。。。。。
最后数组结果 {1, 3, 4, 5, 32, 75, 88}

排序结束

  1. 代码
  int[] Bubbling = {1, 32, 5, 75, 3, 4, 88};


        for (int i = 0; i < Bubbling.length-1; i++) {
            for (int j = 0; j < Bubbling.length-1-i; j++) {
//                左右相比 若左边大于右边 则调换位置
                if (Bubbling[j]>Bubbling[j+1]){
//                    定义一个临时变量记录 左边的数字
                    int temp = Bubbling[j];
//                    开始调换
                    Bubbling[j] = Bubbling[j+1];
//                    把临时变量赋给右边的数
                    Bubbling[j+1] = temp;
                }

            }
            System.out.println("第"+i+"轮:"+Arrays.toString(Bubbling));
        }
        System.out.println(Arrays.toString(Bubbling));

优化版本

 public class BubbleSort {
    public static void main(String[] args) {
        int[] bubbling = {1, 32, 5, 75, 3, 4, 88};
        bubbleSort(bubbling);
        System.out.println(Arrays.toString(bubbling));
    }

    public static void bubbleSort(int[] arr) {

        boolean flag = false; // 记录是否经过调换
        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;
                    //经过调换  设置为true
                    flag = true;
                }
            }
            //为false 说明没有经过调换  就跳过循环
            if (!flag) {
                break;
            } else {
                //经过了调换就给他 设置为false
                flag = false;
            }
        }
    }
}

记得微笑 !在这里插入图片描述在这里插入图片描述在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章