八大排序——冒泡排序

1.冒泡排序的基本原理

目录

1.冒泡排序的基本原理

对存放原始数组的数据,按照从前往后的方向进行多次扫描,每次扫描都称为一趟。当发现相邻两个数据的大小次序不符合时,即将这两个数据进行互换,如果从小大小排序,这时较小的数据就会逐个往前移动,好像气泡网上漂浮一样。

2.冒泡排序的特点:

3.排序的执行过程:

代码解释

1. main 方法

2. bubble 方法

示例运行过程

初始数组

每轮排序后的数组

最终排序结果


对存放原始数组的数据,按照从前往后的方向进行多次扫描,每次扫描都称为一趟。当发现相邻两个数据的大小次序不符合时,即将这两个数据进行互换,如果从小大小排序,这时较小的数据就会逐个往前移动,好像气泡网上漂浮一样。

下面来看一组动态图

2.冒泡排序的特点:

升序排序当中每一轮比较会把最大的数沉到最底(这里以从小到大为例),所有相互比较的次数每一轮会比前一轮少一次。

3.排序的执行过程:

import java.util.Arrays;

/**
 * 冒泡排序
 * @author Mango
 */
public class BubbleSort {
    public static void main(String[] args){
        int[] arr = new int[]{2,4,3,6,5,8,1,0,7,9};
        bubble(arr);
        System.out.println(Arrays.toString(arr));
    }
    
    public static void bubble(int[] arr){
        for(int a = 0; a < arr.length; a++) {
            for(int b = 0; b < arr.length - 1; b++) {
                if(arr[b] > arr[b + 1]) {
                    int temp = arr[b];
                    arr[b] = arr[b + 1];
                    arr[b + 1] = temp;
                }
            }
        }
    }
}

代码解释

1. main 方法

public static void main(String[] args) {
    int[] arr = new int[]{2, 4, 3, 6, 5, 8, 1, 0, 7, 9};
    bubble(arr);
    System.out.println(Arrays.toString(arr));
}

  • 功能:程序的入口。

  • 逻辑

    • 定义了一个未排序的整数数组 arr

    • 调用 bubble 方法对数组进行排序。

    • 打印排序后的数组。

2. bubble 方法

public static void bubble(int[] arr) {
    for (int a = 0; a < arr.length; a++) {
        for (int b = 0; b < arr.length - 1; b++) {
            if (arr[b] > arr[b + 1]) {
                int temp = arr[b];
                arr[b] = arr[b + 1];
                arr[b + 1] = temp;
            }
        }
    }
}

  • 功能:实现冒泡排序算法。

  • 逻辑

    1. 外层循环

      • 遍历数组,从第一个元素到最后一个元素(a 从 0 到 arr.length - 1)。

      • 每次循环的目的是将当前未排序部分的最大值“冒泡”到数组的末尾。

    2. 内层循环

      • 从第一个元素到倒数第二个元素(b 从 0 到 arr.length - 2)。

      • 比较相邻的两个元素 arr[b] 和 arr[b + 1]

      • 如果 arr[b] 大于 arr[b + 1],则交换它们的位置。

    3. 交换操作

      • 使用一个临时变量 temp 来交换两个元素的值。

示例运行过程

初始数组

[2, 4, 3, 6, 5, 8, 1, 0, 7, 9]

每轮排序后的数组

  1. 第1轮

    • 比较并交换相邻元素,将最大值 9 冒泡到末尾。

    • 结果:[2, 3, 4, 5, 6, 1, 0, 7, 8, 9]

  2. 第2轮

    • 比较并交换相邻元素,将次大值 8 冒泡到倒数第二的位置。

    • 结果:[2, 3, 4, 5, 1, 0, 6, 7, 8, 9]

  3. 第3轮

    • 比较并交换相邻元素,将 7 冒泡到倒数第三的位置。

    • 结果:[2, 3, 4, 1, 0, 5, 6, 7, 8, 9]

  4. 第4轮

    • 比较并交换相邻元素,将 6 冒泡到倒数第四的位置。

    • 结果:[2, 3, 1, 0, 4, 5, 6, 7, 8, 9]

  5. 第5轮

    • 比较并交换相邻元素,将 5 冒泡到倒数第五的位置。

    • 结果:[2, 1, 0, 3, 4, 5, 6, 7, 8, 9]

  6. 第6轮

    • 比较并交换相邻元素,将 4 冒泡到倒数第六的位置。

    • 结果:[1, 0, 2, 3, 4, 5, 6, 7, 8, 9]

  7. 第7轮

    • 比较并交换相邻元素,将 3 冒泡到倒数第七的位置。

    • 结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  8. 第8轮

    • 比较并交换相邻元素,数组已经有序,无需交换。

    • 结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  9. 第9轮

    • 比较并交换相邻元素,数组已经有序,无需交换。

    • 结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  10. 第10轮

    • 比较并交换相邻元素,数组已经有序,无需交换。

    • 结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


最终排序结果

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

代码解析:该算法代码由外层循环和内层循环组成,内层循环包括比较大小语句和互换位置语句

外层循环主要是控制代码的执行次数,内层循环主要是进行比较和位置交换

外层循环每次循环都是将最最大的数放到最后边所以内层循环每次都需要减 -1

输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值