牛叔叔 的笔记

好好学习

2024-09-22 14:03

冒泡法排序

牛叔叔

JavaEE

(302)

(0)

收藏

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,直到没有再需要交换的元素为止,这意味着数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(或说“冒泡”到顶端)。

以下是冒泡排序的Java实现,代码中包含了详细的注释来帮助理解算法的工作过程:

public class BubbleSort {
    
    /**
     * 使用冒泡排序算法对数组进行排序
     * @param arr 待排序的数组
     */
    public static void bubbleSort(int[] arr) {
        if (arr == null || arr.length <= 1) {
            return; // 如果数组为空或只有一个元素,则无需排序
        }
        
        // 外层循环控制遍历的轮数
        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]) {
                    // 交换arr[j]和arr[j+1]
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
            // 经过一轮遍历后,最大的元素已经放到了它应该在的位置
            // 所以下一次遍历的时候,最后一个元素不需要再比较了
        }
    }
    
    /**
     * 主函数,用于测试冒泡排序
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        int[] arr = {64, 34, 25, 12, 22, 11, 90};
        bubbleSort(arr);
        
        // 打印排序后的数组
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

在这个例子中,bubbleSort 方法是冒泡排序的实现。它首先检查数组是否为空或长度小于等于1(这两种情况下无需排序)。然后,它使用两层嵌套的循环进行排序:外层循环控制遍历的轮数,内层循环负责在每一轮中进行元素的比较和交换。在内层循环中,我们比较相邻的两个元素,如果它们的顺序错误(即前一个元素比后一个元素大),则交换它们。这样,经过一轮遍历后,最大的元素会被放置到它在数组中的最终位置。随后,我们可以减少内层循环的比较次数,因为已经有一部分元素已经排序好了。最后,通过main方法中的测试代码,我们可以看到冒泡排序的效果。


0条评论

点击登录参与评论