【Python探索之旅】冒泡排序(三種方法)

前言

算法步驟:

?代碼實現

方法一、嵌套循環

方法二 while循環

?方法三、使用生成器表達式

解釋:

時間復雜度:

?完結撒花

前言

冒泡排序是一種簡單的排序算法,它也是一種穩定排序算法。其實現原理是重復掃描待排序序列,并比較每一對相鄰的元素,當該對元素順序不正確時進行交換。一直重復這個過程,直到沒有任何兩個相鄰的元素可以交換,就表明完成了排序。

算法步驟:

  1. 從列表的第一個元素開始,比較它與下一個元素。
  2. 如果第一個元素大于第二個元素,則交換它們的順序。
  3. 繼續比較相鄰元素,直到到達列表的末尾。
  4. 重復步驟 1-3,直到列表中所有元素都按從小到大的順序排列。

給定一個列表 [5, 3, 1, 2, 4],使用冒泡排序對其進行排序:

nums = [5, 3, 1, 2, 4]

第 1 次循環:

  • 比較 5 和 3,交換它們的位置,得到?[3, 5, 1, 2, 4]
  • 比較 5 和 1,交換它們的位置,得到?[3, 1, 5, 2, 4]
  • 比較 5 和 2,交換它們的位置,得到?[3, 1, 2, 5, 4]
  • 比較 5 和 4,不交換,因為 5 已經大于 4。

第 2 次循環:

  • 比較 3 和 1,交換它們的位置,得到?[1, 3, 2, 5, 4]
  • 比較 3 和 2,交換它們的位置,得到?[1, 2, 3, 5, 4]
  • 比較 3 和 5,不交換,因為 3 已經小于 5。
  • 比較 5 和 4,交換它們的位置,得到?[1, 2, 3, 4, 5]

第 3 次循環:

  • 比較 1 和 2,不交換,因為 1 已經小于 2。
  • 比較 2 和 3,不交換,因為 2 已經小于 3。
  • 比較 3 和 4,不交換,因為 3 已經小于 4。
  • 比較 4 和 5,不交換,因為 4 已經小于 5。

經過 3 次循環,列表中的元素已經按從小到大的順序排列好了:[1, 2, 3, 4, 5]

?代碼實現

方法一、嵌套循環

def bubble_sort(nums):for i in range(len(nums)):for j in range(0, len(nums) - i - 1):if nums[j] > nums[j + 1]:nums[j], nums[j + 1] = nums[j + 1], nums[j]return nums

方法二 while循環

def bubble_sort(nums):swapped = Truewhile swapped:swapped = Falsefor i in range(0, len(nums) - 1):if nums[i] > nums[i + 1]:nums[i], nums[i + 1] = nums[i + 1], nums[i]swapped = Truereturn nums

?方法三、使用生成器表達式

def bubble_sort(nums):while True:swapped = Falsefor i in range(0, len(nums) - 1):if nums[i] > nums[i + 1]:nums[i], nums[i + 1] = nums[i + 1], nums[i]swapped = Trueif not swapped:breakreturn nums

解釋:

  • 該方法使用兩個嵌套的循環,類似于方法 1。
  • 外層循環用于跟蹤排序的趟數。
  • 內層循環用于比較相鄰元素并進行交換。
  • swapped?變量用于跟蹤是否在當前趟中進行了任何交換。
  • 如果在某趟中沒有進行任何交換,則說明列表已經排序好,算法提前終止。

最后排序結果

nums = [5, 3, 1, 2, 4]
print(bubble_sort(nums))  # 輸出:[1, 2, 3, 4, 5]

時間復雜度:

冒泡排序的時間復雜度為 O(n^2),其中 n 是列表的長度。這是因為算法需要比較和交換列表中的每個元素,而這需要 O(n) 的時間。對于每個元素,算法需要比較和交換它與列表中其他所有元素,這又需要 O(n) 的時間。因此,總的時間復雜度為 O(n^2)

?優點:

  • 簡單易懂,實現方便。
  • 對數據沒有特殊要求,可以處理各種類型的列表。

缺點:

  • 時間復雜度高,對于大型列表排序效率較低。
  • 穩定性差,即相同元素在排序后的順序不確定。

?完結撒花

本期為大家帶來了Python冒泡排序法的解題思路,因為僅僅只是學習,不敲代碼邏輯思維能力是上不去的,所以發了一期Python版的冒泡排序法的算法題,通過練習,才可以提升在編程中的編碼能力和邏輯思維能力。

??如果對博主感興趣歡迎大家點贊+關注,添加博主聯系方式一起探索哦!

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

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

相關文章

2025年第十一屆北京國際印刷技術展覽會

2025年第十一屆北京國際印刷技術展覽會 展覽時間:2025年5月15-19日 展覽地點:北京中國國際展覽中心(順義館) 主辦單位:中國印刷及設備器材工業協會中國國際展覽中心集團有限公司 承辦單位:北京中印協華港國…

海思Hi3065H 200MHz 高性能 RISCV32 A2 MCU

這是一款海思自研的RISCV32內核的高性能實時控制專用MCU, 具有高性能、高集成度、高可靠性、易開發的特點,同時還有嵌入式AI能力。 CPU ? RISC-V200MHzFPU 存儲 ? Up to 152KB Code Flash ? 8KB Data Flash ? 16KB SRAM 個人認為這是MCU梯隊非常…

[Linux][網絡][高級IO][IO多路轉接][select][poll]詳細講解

目錄 1.IO多路轉接之select1.初識select2.select()3.關于fd_set結構4.關于timeval結構5.理解select執行過程6.select就緒條件7.select特點8.select優點(任何一個多路轉接方案,都具備)9.select缺點10.select的一般編寫代碼的模式11.思考 && 問題 2.IO多路轉接…

【PB案例學習筆記】-02 目錄瀏覽器

寫在前面 這是PB案例學習筆記系列文章的第二篇,該系列文章適合具有一定PB基礎的讀者, 通過一個個由淺入深的編程實戰案例學習,提高編程技巧,以保證小伙伴們能應付公司的各種開發需求。 文章中設計到的源碼,小凡都上…

基于Django實現的(bert)深度學習文本相似度檢測系統設計

基于Django實現的(bert)深度學習文本相似度檢測系統設計 開發語言:Python 數據庫:MySQL所用到的知識:Django框架工具:pycharm、Navicat、Maven 系統功能實現 登錄頁面 注冊頁面:用戶賬號,密碼…

05-14 周二 PyTorch動態量化和靜態量化理解

05-14 周二 PyTorch動態量化和靜態量化理解 時間版本修改人描述2024年5月14日10:44:30V0.1宋全恒新建文檔2024年5月14日16:28:16V1.0宋全恒填充了PyTorch對于兩種量化方式的內容 簡介 Pytorch動態量化 設計神經網絡時,可以進行許多權衡。在模型開發和訓練期間&…

Dilworth定理:最少的下降序列個數就等于整個序列最長上升子序列的長度

概念如下&#xff1a; 狄爾沃斯定理_百度百科 (baidu.com) 本質就是找要求序列中最長的單調的子序列&#xff08;不一定連續&#xff09;的長度。 模板如下&#xff1a; 時間復雜度為O&#xff08;N^2&#xff09; #include<iostream>using namespace std;int dp[100…

RK3568平臺開發系列講解(SPI篇)SPI數據的傳輸

??返回專欄總目錄 文章目錄 一、數據結構1.1、spi_transfer 結構體1.2、spi_message二、數據發送程序分析沉淀、分享、成長,讓自己和他人都能有所收獲!?? ?? 參考資料: spi_transferspi_message一、數據結構 spi 數據傳輸主要使用了 spi_message 和 spi_transfer 結構…

二叉樹的前序遍歷(leetcode)

144. 二叉樹的前序遍歷 - 力扣&#xff08;LeetCode&#xff09; 給你二叉樹的根節點 root &#xff0c;返回它節點值的 前序 遍歷。 這道題的啟發性真的很強 &#xff0c;這里必須傳入i的指針進去&#xff0c;下一次棧幀i&#xff0c;但回到了上一層i又變回到了原來的i&#…

docker network ls(用于列出 Docker 主機上的所有網絡)

docker network ls 是一個 Docker 命令&#xff0c;用于列出 Docker 主機上的所有網絡。Docker 允許你創建自定義的網絡&#xff0c;以便更好地控制容器之間的通信。 當你運行 docker network ls 命令時&#xff0c;你可能會看到如下類似的輸出&#xff08;輸出可能會根據你的…

每日一題12:Pandas:數據重塑-融合

一、每日一題 解答&#xff1a; import pandas as pddef meltTable(report: pd.DataFrame) -> pd.DataFrame:reshaped_report report.melt(id_varsproduct, var_namequarter, value_namesales)return reshaped_report 題源&#xff1a;Leetcode 二、總結 melt()函數是Pa…

Nginx生產環境最佳實踐之配置灰度環境

你好呀&#xff0c;我是趙興晨&#xff0c;文科程序員。 下面的內容可以說是干貨滿滿建議先收藏再慢慢細品。 今天&#xff0c;我想與大家深入探討一個我們日常工作中不可或缺的話題——灰度環境。你是否在工作中使用過灰度環境&#xff1f;如果是&#xff0c;你的使用體驗如…

AI圖像生成-基本步驟

模型板塊 1、新建采樣器&#xff1a;新建節點-》采樣器-》K采樣器 2、拖動模型節點后放開&#xff0c;選擇checkpoint加載器&#xff08;簡易&#xff09;&#xff0c;模型新建成功 提示詞板塊 1、拖動正面條件節點后放開&#xff0c;選擇CLIP文本編碼器&#xff0c;模型新建…

mysql 一次刪除多個備份表

show tables時&#xff0c;發現備份的表有點多&#xff0c;想要一個sql就刪除 總不能drop table xx ; 寫多次吧。 方式一 1.生成刪除某個數據庫下所有的表SQL -- 查詢構建批量刪除表語句&#xff08;根據數據庫名稱&#xff09; select concat(drop table , TABLE_NAME, ;)…

代碼隨想錄算法訓練營第39天|● 62.不同路徑 ● 63. 不同路徑 II

62. 不同路徑 遞歸棧很酷 但超時 class Solution:def uniquePaths(self, m: int, n: int) -> int:if m1 or n1:return 1return self.uniquePaths(m-1,n)self.uniquePaths(m,n-1) 逐行dp class Solution:def uniquePaths(self, m: int, n: int) -> int:dp[1]*nfor j in…

FSMC的NOR Flash/PSRAM 控制器功能介紹(STM32F4)

目錄 概述 1 FSMC支持的類型 1.1 信號類型概述 1.2 FSMC的應用 2 外部存儲器接口信號 2.1 I/O NOR Flash 2.2 PSRAM/SRAM 3 支持的存儲器和事務 4 通用時序規則 5 NOR Flash/PSRAM 控制器異步事務 5.1 模式 1 - SRAM/PSRAM (CRAM) 5.2 模式 A - SRAM/PSRAM (CRAM…

Golang | Leetcode Golang題解之第90題子集II

題目&#xff1a; 題解&#xff1a; func subsetsWithDup(nums []int) (ans [][]int) {sort.Ints(nums)n : len(nums) outer:for mask : 0; mask < 1<<n; mask {t : []int{}for i, v : range nums {if mask>>i&1 > 0 {if i > 0 && mask>&…

[HUBUCTF 2022 新生賽]ezsql

測試無結果 掃描目錄&#xff0c;得到源碼 找到注入點 思路&#xff1a;更新資料的時候可以同時更新所有密碼 我們需要知道密碼的字段名 爆庫 nicknameasdf&age111,description(select database())#&descriptionaaa&token31ad6e5a2534a91ed634aca0b27c14a9 爆表…

運維別卷系列 - 云原生監控平臺 之 08.prometheus grafana 實踐

文章目錄 [toc]部署 Grafana準備配置文件grafana.iniprovisioning/datasources/prometheus.yamlprovisioning/dashboards/dashboards.yamlprovisioning/dashboards/views 創建 svc創建 deployment Grafana 是一個圖形化界面&#xff0c;配置 Prometheus 作為數據源&#xff0c;…

網絡庫-POCO介紹

1.簡介 POCO C Libraries 提供一套 C 的類庫用以開發基于網絡的可移植的應用程序&#xff0c;它提供了許多模塊&#xff0c;包括網絡編程、文件系統訪問、線程和并發、數據庫訪問、XML處理、配置管理、日志記錄等功能。Poco庫的設計目標是易于使用、高度可定制和可擴展。 包含…