Java基础数组 简单冒泡排序

本文详细解析冒泡排序算法的工作原理,通过代码实例演示如何用Java实现升序排序,并介绍了其过程中的关键步骤。理解如何通过相邻元素比较和交换达到排序目的。

1 什么是冒泡排序

  首先,我们拿到的是一个无序数组,然后,越小的元素会经过交换慢慢的 “ 浮 ” 到数列的顶端(升序或降序),就像水中的小鱼吐出的气泡最终会浮到顶端,浮出水面一样,所以叫做 “ 冒泡排序 ”。

2 怎么冒泡排序

1、思路
(1) 首先,确定从左到右是升序还是降序;
(2) 比较相邻的两个元素,是否符合升序降序的要求,符合则接着比较后面相邻的元素,不符合则交换两个元素;
(3) 对每一对元素重复上一项工作,直到排完。

2、具体实施(结合代码)
(1) 给定一个无序的数组;

int[] arr = {9,5,2,7,3,6};
bubbleSort(arr);
System.out.println(arr);

(2) 我们要构建两个循环,一个里循环一个外循环,外循环控制第几轮的循环,内层控制当前一轮循环中两个数之间的交换。我们升序排列,所以就是越大越往右边放,小的数就会像气泡一样 " 浮 "到最左端;

// 外层循环,控制轮数
for (int bound = 0; bound <arr.length-1; bound++) {
    //里层循环,比较交换
    for (int cur = 0; cur < arr.length-1-bound; cur++) {
        if(arr[cur] > arr[cur + 1]){
            //不符合排序要求
            int tmp = arr[cur];
            arr[cur] = arr[cur + 1];
            arr[cur + 1] = tmp;
        }
    }
}

在这里插入图片描述
红色下划线标注的是交换的当前循环正在比较交换的两个数,越大越往右边移动;

在这里插入图片描述
在这里插入图片描述
  我们发现其实第三轮就已经排好了,但计算机会接着循环判断,因为计算机不能像人这样看到并且判断,不过每次循环到语句 if(arr[cur] > arr[cur + 1]) 时不符合条件就不会再交换了。
  注意 bound < arr.length - 1 ,首先它从 0 开始,所以要 < arr.length 而不是 <= ,然后因为循环到最后一次时,只剩一个数没有必要再进循环中比较,所以再 - 1 。
  注意 cur < arr.length - 1 - bound ,它 < arr.length 和 - 1 的原因同上, - bound 是因为,排序排到第几轮,就会有几个数已经到了它应在的位置,如例子中,排完第二次时,7 和 9 已经到了应到的位置。

3 完整代码

    int[] arr = {9,5,2,7,3,6};
    bubbleSort(arr);
    System.out.println(Arrays.toString(arr));

public static void bubbleSort(int[] arr) {
    //从前往后遍历
    //外层循环遍历的次数
    //已排区间[0,bound)
    //待排区间[bound,length)
    for (int bound = 0; bound <arr.length-1; bound++) {
        //里层循环,比较交换
        for (int cur = 0; cur < arr.length-1-bound; cur++) {
            if(arr[cur] > arr[cur + 1]){
                //不符合排序要求
                int tmp = arr[cur];
                arr[cur] = arr[cur + 1];
                arr[cur + 1] = tmp;
            }
        }
    }
}
Java中,可以通过自定义数组并实现冒泡排序算法来对数组中的元素进行排序。冒泡排序是一种基础排序算法,其核心思想是通过多次遍历数组,比较相邻的两个元素,并在需要时交换它们的位置,从而将较大的元素逐渐“浮”到数组的末尾。这种排序方式适用于一维数组的处理。 下面是一个完整的示例,展示如何在Java中实现一个自定义数组并通过冒泡排序对其进行升序排列: ### 示例代码 ```java public class CustomArraySorter { // 冒泡排序方法 public static void bubbleSort(int[] arr) { int n = arr.length; for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { // 交换 arr[j] 和 arr[j+1] int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } // 打印数组的方法 public static void printArray(int[] arr) { for (int value : arr) { System.out.print(value + " "); } System.out.println(); } public static void main(String[] args) { // 自定义数组 int[] customArray = {64, 34, 25, 12, 22, 11, 90}; System.out.println("原始数组:"); printArray(customArray); // 调用冒泡排序方法 bubbleSort(customArray); System.out.println("冒泡排序后的数组:"); printArray(customArray); } } ``` ### 程序说明 - **`bubbleSort()` 方法**:这是实现冒泡排序的核心部分。外层循环控制排序的轮数(共 `n-1` 次),内层循环负责比较和交换相邻元素。每次内层循环结束后,最大的未排序元素会移动到正确的位置。 - **`printArray()` 方法**:用于打印数组内容,便于查看排序前后的变化。 - **主方法 `main()`**:在此处定义了一个自定义数组,并调用了排序和打印方法。程序首先输出原始数组,然后执行排序操作,最后输出排序后的数组[^4]。 ### 运行结果 假设输入的数组为 `{64, 34, 25, 12, 22, 11, 90}`,程序运行后将输出如下内容: ``` 原始数组: 64 34 25 12 22 11 90 冒泡排序后的数组: 11 12 22 25 34 64 90 ``` 通过这种方式,可以轻松地对自定义的一维数组应用冒泡排序算法,并根据实际需求扩展功能,例如支持降序排序、添加日志记录等。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值