Java 實現冒泡排序:[通俗易懂的排序算法系列之二]

引言

大家好!歡迎來到我的排序算法系列第二篇。今天,我們將學習另一種非常基礎且廣為人知的排序算法——冒泡排序 (Bubble Sort)

冒泡排序的名字非常形象,它模擬了水中氣泡上升的過程:較小(或較大)的元素會像氣泡一樣,通過不斷交換,逐漸“浮”到數組的一端。


什么是冒泡排序?

冒泡排序的核心思想是:重復地遍歷待排序的序列,每次遍歷比較相鄰的兩個元素,如果它們的順序錯誤(例如,在升序排序中,前面的元素大于后面的元素),就交換它們的位置。

這個過程會一直重復,直到在某一次遍歷中沒有發生任何元素交換,這意味著整個序列已經排序完成。

想象一下:

  1. 第一輪: 從第一個元素開始,依次比較相鄰的兩個元素。如果順序不對就交換。這一輪結束后,最大的元素會被移動到數組的末尾
  2. 第二輪: 再次從第一個元素開始,比較相鄰元素并交換(如果需要),但這次只需要比較到倒數第二個元素,因為最后一個元素已經是最大的了。這一輪結束后,第二大的元素會被移動到倒數第二的位置。
  3. 重復這個過程: 每一輪都將當前未排序部分的最大元素“冒泡”到其最終位置。比較的范圍也逐漸縮小。

算法步驟詳解 (以升序為例)

假設我們有數組 [5, 1, 4, 2, 8]

  1. 第 1 輪 (比較 n-1 次 = 4次):

    • 比較 51 -> 1 > 5? 否 -> 5 > 1? 是 -> 交換 -> [1, 5, 4, 2, 8]
    • 比較 54 -> 5 > 4? 是 -> 交換 -> [1, 4, 5, 2, 8]
    • 比較 52 -> 5 > 2? 是 -> 交換 -> [1, 4, 2, 5, 8]
    • 比較 58 -> 5 > 8? 否 -> 不交換 -> [1, 4, 2, 5, 8]
    • 結果: 最大元素 8 已就位。下次只需比較前 4 個。
  2. 第 2 輪 (比較 n-2 次 = 3次):

    • 比較 14 -> 1 > 4? 否 -> 不交換 -> [1, 4, 2, 5, 8]
    • 比較 42 -> 4 > 2? 是 -> 交換 -> [1, 2, 4, 5, 8]
    • 比較 45 -> 4 > 5? 否 -> 不交換 -> [1, 2, 4, 5, 8]
    • 結果: 第二大元素 5 已就位。下次只需比較前 3 個。
  3. 第 3 輪 (比較 n-3 次 = 2次):

    • 比較 12 -> 1 > 2? 否 -> 不交換 -> [1, 2, 4, 5, 8]
    • 比較 24 -> 2 > 4? 否 -> 不交換 -> [1, 2, 4, 5, 8]
    • 結果: 第三大元素 4 已就位。下次只需比較前 2 個。
  4. 第 4 輪 (比較 n-4 次 = 1次):

    • 比較 12 -> 1 > 2? 否 -> 不交換 -> [1, 2, 4, 5, 8]
    • 結果: 第四(小)大元素 2 已就位。數組排序完成。

Java 代碼實現

下面提供了兩種冒泡排序的 Java 實現:基礎版和優化版。

1. 基礎冒泡排序 (bubbleSort1)

這是最經典的冒泡排序實現。

import java.util.Arrays;public class BubbleSort { // 類名建議大寫開頭public static void main(String[] args) {int[] arr = {31, 25, 18, 16, 19, 82, 71

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75190.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75190.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75190.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

struct結構體、union聯合體和枚舉

目錄 一、結構體的聲明和使用 1.1 結構體正常聲明和創建 1.2 結構體特殊聲明 1.3 結構體的自引用 二、結構體內存對齊 2.1 對齊規則 2.2 #pragma修改 三、結構體傳參 四、結構體位段 4.1 位段內存分配 4.2 位段內存應用 五、結構體中的柔性數組概念 六、union聯合…

大模型本地部署系列(2) Ollama部署DeepSeek-R1

成功運行截圖 部署步驟 我們進入到ollama的官網: Ollama?ollama.com/?編輯 找到上方的Models ,然后點擊 此時會跳轉到模型列表頁面: 點擊 deepseek-r1 鏈接進去,此時我們會看到下拉框中有各個版本的大模型,越往后…

繪制動態甘特圖(以流水車間調度為例)

import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np from matplotlib import cm# 中文字體配置(必須放在所有繪圖語句之前) plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] Fa…

PyTorch實現線性回歸的基礎寫法與封裝API寫法

目錄 1. 基礎寫法 1.1導包 2.2加載讀取數據 2.3原始數據可視化(畫圖顯示) 2.4線性回歸的(基礎)分解寫法 2.5定義訓練過程 2.PyTorch實現 線性回歸的封裝寫法(實際項目中的常用寫法) 2.1創建線性回歸模型 2.2定義損失函數 2.3定義優化器 2.4定義訓練過程 1…

python 常用的6個爬蟲第三方庫

Python中有非常多用于網絡數據采集的庫,功能非常強大,有的用于抓取網頁,有的用于解析網頁,這里介紹6個最常用的庫。 1. BeautifulSoup BeautifulSoup是最常用的Python網頁解析庫之一,可將 HTML 和 XML 文檔解析為樹形…

基于BP神經網絡的雜草智能識別系統(雜草識別、Python項目)

基于BP神經網絡的雜草智能識別系統 項目介紹 本項目是一個基于PyQt5和BP神經網絡的雜草智能識別系統。系統通過圖像處理和神經網絡技術, 能夠識別8種不同的雜草類別。用戶可以通過上傳圖片,系統會自動識別圖片中的雜草類別,并顯示識別結果和…

Python3筆記之號稱替代pip的uv包管理器

uv是什么? uv,這是一個由 Astral 團隊開發的極快速的Python包和項目管理工具,用Rust語言編寫。它集成了多種功能,旨在替代pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv等多個工具,提供更高效、更全面的Py…

IT管理思路

甲方CIO和IT管理者-如何做好組織級IT能力提升_嗶哩嗶哩_bilibili

ChatGPT的GPT-4o創建圖像Q版人物提示詞實例展示

最近感覺GPT-4o發布的新功能真的強大,所以總結了一些提示詞分享給大家,大家可以去試試,玩法多多,可以用GPT-4o生成圖片,然后用可靈進行圖生視頻,就能去發布視頻了!接下來和筆者一起來試試&#…

Transformer Decoder Block的幾個優化方案

寫在前面 在大型語言模型(LLM)的演進浪潮中,Transformer 架構憑借其強大的并行計算能力和對長距離依賴的出色捕捉,奠定了核心地位。然而,標準的 Transformer Decoder Block 遵循著一種相對固定的模式:先進行自注意力(Self-Attention)捕捉上下文信息,再通過前饋神經網…

五種IO模型與select和poll分別實現多路轉接

五種IO模型與select和poll分別實現多路轉接 何為IO 不論是在前面文件部分,還是后面的網絡部分,IO都是非常常見的。但是當時只是簡單對IO進行提及,并沒有對IO的本質進行介紹。那么到底何為IO?IO全稱為輸入和輸出,而任…

單例模式的寫法(保證線程安全)

1. 引言 1.1 什么是單例模式? 單例模式(Singleton Pattern)是一種創建型設計模式,它確保一個類只有一個實例,并提供一個全局訪問點。 核心思想:控制實例化過程,避免重復創建對象。 1.2 為什么…

C++ 環境設置

C++ 環境設置 引言 C++作為一種高性能的編程語言,廣泛應用于系統軟件、游戲開發、實時系統等領域。為了能夠順利進行C++編程,我們需要在計算機上配置合適的開發環境。本文將詳細講解如何在Windows、macOS和Linux系統中設置C++開發環境。 Windows系統下C++環境設置 1. 安裝…

【Kafka基礎】ZooKeeper在Kafka中的核心作用:分布式系統中樞神經系統

在分布式系統的世界里,協調和管理多個節點間的狀態是一項復雜而關鍵的任務。Apache Kafka作為一款高性能的分布式消息系統,其設計哲學是"專為單一目的而優化"——即高效處理消息流。為了實現這一目標,Kafka選擇將集群協調管理的重任…

<《AI大模型應知應會100篇》第8篇:大模型的知識獲取方式及其局限性

第8篇:大模型的知識獲取方式及其局限性 摘要 大模型(如GPT、BERT、Qwen、DeepSeek等)憑借其卓越的自然語言處理能力,已經成為人工智能領域的明星。然而,這些模型“知道”什么?它們如何獲取知識&#xff1f…

ESModule和CommonJS在Node中的區別

ESModule console.log(require);//>errorconsole.log(module);//>errorconsole.log(exports);//>errorconsole.log(__filename);//>errorconsole.log(__dirname);//>error全部報錯commonjs console.log(require);console.log(module);console.log(exports);co…

Spring Boot 配置文件加載優先級全解析

精心整理了最新的面試資料和簡歷模板,有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 Spring Boot 配置文件加載優先級全解析 Spring Boot 的配置文件加載機制是開發者管理不同環境配置的核心功能之一。其通過外部化配置(Externaliz…

2025 年陜西消防設施操作員考試攻略:歷史文化名城的消防傳承與創新?

陜西擁有豐富的歷史文化遺產,眾多古建筑分布其中,同時也在不斷推進現代化建設,消防工作面臨傳承與創新的雙重任務,這在考試中也有所體現。? 考點融合與特色:一方面,古建筑的消防保護是重點,包…

【Unity網絡編程知識】C#的 Http相關類學習

1、搭建HTTP服務器 使用別人做好的HTTP服務器軟件,一般作為資源服務器時使用該方式(學習階段建議使用)自己編寫HTTP服務器應用程序,一般作為Web服務器或者短連接游戲服務器時使用該方式(工作后由后端程序員來做&#…

Android Studio - 解決 Please Select Android SDK

一、出現的問題 點擊 Run 后彈窗,圖一位置出現圖二提示。 二、解決辦法 進入 Tools -> SDK Manager,在 Android SDK Location 點擊 Edit,一直 Next 就解決了。