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

【算法】冒泡排序

前言:

        冒泡排序是一种简单的排序算法,基本思想是通过重复遍历待排序的数列,比较相邻元素并交换它们的位置,以将较大(较小)的元素 “冒泡” 到数列的末端。

正文:

一、冒泡排序的关键步骤:

1、比较相邻的步骤

2、遍历整个数列

3、循环执行

二、冒泡排序的复杂度:

        最好的情况:O(n) ,此时说明我们的数据已经处于一个有序的状态。

        最坏和平均的情况:O(n的2次方)

三、冒泡排序的特点:

        1、稳定性:即相等的元素在排序后仍保持原有的顺序性。

        2、简单:实先简单,易理解,不易使用在大型数据中。

四、java代码示例

package com.muyu.cloud.system.test;

/**
 * @author: 宁兴星
 * Date: 2024/9/12 17:43
 * Description:
 */
public class BubbleSort {

    // 冒泡排序方法
    public static void bubbleSort(int[] arr) {
        int n = arr.length;
        boolean swapped;

        // 外层循环控制比较的轮数
        for (int i = 0; i < n - 1; i++) {
            swapped = false;

            // 内层循环进行相邻元素的比较与交换
            for (int j = 0; j < n - 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;
                    swapped = true; // 标记发生了交换
                }
            }

            // 如果没有发生交换,数组已经有序,提前结束
            if (!swapped) {
                break;
            }
        }
    }

    // 主方法进行测试
    public static void main(String[] args) {
        int[] array = {64, 34, 25, 12, 22, 11, 90};

        System.out.println("原数组:");
        printArray(array);

        bubbleSort(array);

        System.out.println("排序后的数组:");
        printArray(array);
    }

    // 打印数组的辅助方法
    public static void printArray(int[] arr) {
        for (int num : arr) {
            System.out.print(num + " ");
        }
        System.out.println();
    }
}

执行结果(升序):

 

如需要降序,将 > 修改为 < 即可:

 

执行结果:

 


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

相关文章:

  • SOC Boot学习(三)——boot流程
  • FreeRTOS的列表与列表项
  • 【Linux】Linux 权限的理解
  • 【Linux】HTTP协议和HTTPS加密
  • [宁波24届]平方数
  • 华为大变革?仓颉编程语言会代替ArkTS吗?
  • CSP-J 算法基础 二分查找与二分答案
  • 【Python爬虫】利用爬虫抓取双色球开奖号码,获取完整数据并通过随机森林和多层感知两种模型进行简单的预测
  • VulnHub DC-1-DC-7靶机WP
  • 计算机网络期末试题及答案
  • Java学习路线
  • Redis及其他缓存
  • 数字孪生之-3D可视化
  • Linux系统安装
  • C++20那些事之何时使用可能性属性?
  • 银行业金融机构反洗钱现场检查数据接口规范(试行)
  • 如何升级用 Helm 安装的极狐GitLab Runner?
  • C#发送正文带图片带附件的邮件
  • Eclipse折叠if、else、try catch的{}
  • Git 提取和拉取的区别在哪
  • 【Jupyter Notebook】安装与使用
  • DBeaver 连接 mysql 报错:Public Key Retrieval is not allowed
  • MySQL 数据库与表的创建指南
  • JeecgBoot自定义多选组件JCheckBtnGroup
  • 携手Vatee万腾平台,共赴智能时代新征程
  • 电气负载模拟器