拓展冒泡排序

冒泡排序

拓展冒泡排序_第1张图片

冒泡排序的动态演示

比较相邻的元素。

1,如果第一个比第二个大(升序),就交换他们两个。
2,对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,
最后的元素会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4, 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较为
止。

冒泡排序动态演示的网址:https://www.bilibili.com/video/BV1qY4y1h7Lz/

2 排序思路
先给大家放几张图,让大家感受下冒泡排序是怎么排序的:
比如我现在有一组乱序的数据:
11 9 13 6 8 5,希望通过冒泡排序后得到从小到大按顺序排列的数据
首先开始第1轮的第1次比较:11与9进行比较,11>9,所以互换位置:
拓展冒泡排序_第2张图片

这是11与9互换位置后的结果,红线标注的就是当前正在比较的两个数据:

拓展冒泡排序_第3张图片

第1轮的第2次比较:11与13进行比较,11<13,符合顺序,无需互换位置:

拓展冒泡排序_第4张图片

第1轮的第3次比较:6与13进行比较,13>6,不符合顺序,这是互换位置后的结果:

拓展冒泡排序_第5张图片

第1轮的第4次比较:8与13进行比较,13>8,不符合顺序,这是互换位置后的结果:

拓展冒泡排序_第6张图片

第1轮的第5次比较:5与13进行比较,13>5,不符合顺序,这是互换位置后的结果:
目前第一轮所有元素都参与了比较,结果:9 11 6 8 5 13

拓展冒泡排序_第7张图片

第2轮的第1次比较:9与11进行比较,9<11,符合顺序,无需互换位置:

拓展冒泡排序_第8张图片

第2轮的第2次比较:11与6进行比较,11>6,不符合顺序,这是互换位置后的结果:

拓展冒泡排序_第9张图片

第2轮的第3次比较:11与8进行比较,11>8,不符合顺序,这是互换位置后的结果:

拓展冒泡排序_第10张图片

第2轮的第4次比较:11与5进行比较,11>5,不符合顺序,这是互换位置后的结果:
第二轮结果:9 6 8 5 11 13

拓展冒泡排序_第11张图片

第3轮的第1次比较:9与6进行比较,9>6,不符合顺序,这是互换位置后的结果:

拓展冒泡排序_第12张图片

第3轮的第2次比较:9与8进行比较,9>8,不符合顺序,这是互换位置后的结果:

拓展冒泡排序_第13张图片

第3轮的第3次比较:9与5进行比较,9>5,不符合顺序,这是互换位置后的结果:
第三轮结果:6 8 5 9 11 13

拓展冒泡排序_第14张图片

第4轮的第1次比较:6与8进行比较,6<8,符合顺序,无需互换位置:

拓展冒泡排序_第15张图片

第4轮的第2次比较:5与8进行比较,8>5,不符合顺序,这是互换位置后的结果:
第四轮结果:6 5 8 9 11 13

拓展冒泡排序_第16张图片

第5轮的第1次比较:6与5进行比较,6>5,不符合顺序,这是互换位置后的结果:

拓展冒泡排序_第17张图片

第五轮结果:5 6 8 9 11 13,到目前为止,排序完成

冒泡排序动态演示的网址:https://www.bilibili.com/video/BV1qY4y1h7Lz/

冒泡排序的代码实现

package com.tedu;

public class TestBubbleSort {

    public static void main(String[] args) {
        int[] arr = {6,9,2,9,1};
        //目标:从小到大
        //冒泡排序的轮数 = 元素的总个数 - 1
        //轮数是多轮,每一轮比较的次数是多次,需要用到双重循环,即循环嵌套
        //外循环控制 轮数,内循环控制每一轮的比较次数和过程
        for(int i=1; i<arr.length; i++){ //循环次数是 arr.length-1 次/轮

            for(int j=0; j<arr.length-i; j++){
                //希望的是 arr[j] < arr[j+1]
                if(arr[j] > arr[j+1]){
                    //交换 arr[j]与 arr[j+1]
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                   //到这里元素的顺序已经排序完成,下一步我们通过遍历查看排序后的结果
                }
            }
        }
        //完成排序,遍历结果
        for(int i=0; i<arr.length; i++){
            System.out.print(arr[i]+" ");
        }
    }
}

你可能感兴趣的:(数据结构,算法,排序算法)