当前位置: 首页 > article >正文

Java冒泡排序算法之:变种版

什么是冒泡排序算法?

冒泡排序是一种简单的排序算法,通过多次遍历待排序的数组,逐步将最大的(或最小的)元素“冒泡”到数组的一端。它以其操作过程类似气泡从水底冒至水面而得名。


冒泡排序的工作原理

  1. 比较相邻元素: 从数组的第一个元素开始,逐个比较相邻的两个元素。如果前一个元素比后一个元素大(升序排序),则交换它们的位置。
  2. 将最大值(或最小值)移动到数组一端: 在每一轮遍历中,未排序部分的最大值(或最小值)会逐步移动到数组的末端。
  3. 重复以上步骤: 每次遍历的范围减小,直到整个数组有序。

代码实现

以下是冒泡排序的 Java 实现代码:

public class BubbleSort {
    public static void bubbleSort(int[] arr) {
        int n = arr.length;
        // 外层循环表示需要进行的轮数
        for (int i = 0; i < n - 1; i++) {
            boolean swapped = false; // 标志位,用于优化
            // 内层循环比较相邻元素
            for (int j = 0; j < n - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    // 如果前一个元素比后一个大,交换它们
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    swapped = true; // 标记发生了交换
                }
            }
            // 如果某一轮没有发生交换,说明数组已经有序
            if (!swapped) {
                break;
            }
        }
    }

    public static void main(String[] args) {
        int[] arr = {5, 2, 9, 1, 5, 6};
        System.out.println("排序前:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
        System.out.println();

        bubbleSort(arr);

        System.out.println("排序后:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

示例运行结果

输入:
arr = {5, 2, 9, 1, 5, 6}

输出:
排序前:5 2 9 1 5 6
排序后:1 2 5 5 6 9


当然,基于传统的冒泡排序算法,我们还有其一种变种,简易代码实现如下:

public static void sort(int [] data){
    for (int j = 0;j < data.length-1;j++){
        int m = j;
        for (int k = j + 1;k < data.length;k++){
            if (data[k] < data[m]){
               m = k;
            }
        }
    int temp = data[m];
    int[m] = data[j];
    data[j] = temp;

    /*end of the loop*/
   }
}

可以说,传统冒泡是像一个大泡泡从底部向上冒一样,最终是由末尾的大数向小数排,而这种变种呢跟其恰好相反,是由开头的小数向大数排。 


冒泡排序的时间复杂度

  1. 时间复杂度:

    • 最好情况(数组已排序):O(n)O(n)O(n) (优化后)。
    • 最坏情况(数组逆序):O(n2)O(n^2)O(n2)。
    • 平均情况:O(n2)O(n^2)O(n2)。
  2. 空间复杂度:

    • O(1)O(1)O(1)(仅需常量级的额外空间)。

总结

冒泡排序虽然简单,但由于其效率较低,通常适用于小规模数据集或教学演示中。更高效的排序算法如快速排序或归并排序更适合实际应用场景。

 

 

 

 

 

 


http://www.kler.cn/a/507175.html

相关文章:

  • 基于Java的百度AOI数据解析与转换的实现方法
  • 设计模式-工厂模式/抽象工厂模式
  • 增广卡尔曼滤波AKF的要点分析
  • 【Excel】【VBA】双列排序:坐标从Y从大到小排列之后相同Y坐标的行再对X从小到大排列
  • Google常用语法解析
  • 《AI赋能鸿蒙Next,打造极致沉浸感游戏》
  • Require:利用MySQL binlog实现闪回操作
  • 国产化板卡设计原理图:2295-基于 JFM7K325T的半高PCIe x4双路万兆光纤收发卡
  • Django框架:python web开发
  • 深度学习超参数调优秘籍:解锁模型的最佳性能
  • Vue2中使用正则表达式限制输入框输入
  • G1原理—6.G1垃圾回收过程之Full GC
  • 面试反馈流程及模版
  • 【算法】枚举
  • Hive SQL必刷练习题:留存率问题
  • ffmpeg硬件编码
  • HTTP:Nagle算法与TCP_NODELAY
  • 蛋糕商城 SpringBoot3.4.0,JPA
  • OpenCV机器视觉:主色提取的奇妙之旅
  • Pytorch|YOLO
  • python中元类相关的问答题
  • UML系列之Rational Rose笔记六:部署图
  • 代理模式实现
  • Java爬虫获取淘宝item_search_suggest API接口的搜索词推荐
  • MySQL入门学习四(数据表基本操作)
  • 操作系统 期末重点复习