Python深度理解系列之【排序算法——冒泡排序】

讀者大大們好呀!!!??????


請添加圖片描述
👀期待大大的關注哦??????
🚀歡迎收看我的主頁文章??木道尋的主頁

文章目錄

  • 🔥前言
  • 🚀冒泡排序python實現
    • 算法實現
    • 圖形化算法展示
  • ??????總結

🔥前言

請添加圖片描述
冒泡排序算法的基本思想是通過重復遍歷待排序的數列,比較每對相鄰元素,如果它們的順序錯誤(根據元素排序規則來說)就把它們交換過來。這個過程中,較小的元素會像氣泡一樣逐漸“浮”到數列的頂端,也就是數列的前端。這個過程會重復進行,直到數列被排序完成

🚀冒泡排序python實現

歷史:
關于冒泡排序算法的創造歷史,據稱在1960年,英國計算機科學家霍爾(Tony Hoare)在參加英國國家物理實驗室的俄文機械翻譯項目時,為了提高翻譯效率而提出了冒泡排序算法。這個算法以其穩定性和簡單性而著稱,盡管這個說法存在,但沒有確鑿的實證來支持這一點。

算法實現

1、冒泡排序代碼python實現

def bubble_sort(arr):n = len(arr)# 遍歷所有數組元素for i in range(n):# Last i elements are already in placefor j in range(0, n-i-1):# 遍歷數組從0到n-i-1# 交換如果元素大于下一個元素if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]

2、運行結果
實驗結果

圖形化算法展示

1、matplotlib圖形化展示

代碼如下:

import matplotlib.pyplot as pltdef bubble_sort(arr):n = len(arr)plt.ion()  # 開啟交互模式for i in range(n):for j in range(1, n-i):if arr[j-1] > arr[j]:arr[j-1], arr[j] = arr[j], arr[j-1]  # 交換元素plt.clf()  # 清除之前的圖形plt.plot(arr, 'ro-')  # 繪制當前數組狀態plt.title('Bubble Sort Animation')plt.draw()  # 繪制更新plt.pause(1)  # 暫停一段時間,以便觀察# 創建一個待排序的數組
arr = [64, 34, 25, 12, 22, 11, 90]
# arr = []
# num = int(input("請輸入需要排序的數字個數:"))
# print("請依次輸入需要排序的數字\n")
# for i in range(num):
#     arr.append(int(input(f"第{i+1}個數:")))
# print("原始數組:")
# print(arr)
#
# bubble_sort(arr)
# print("排序后的數組:")
# print(arr)# 原始數組的圖形繪制
plt.figure(figsize=(10, 5))
plt.plot(arr, 'ro-', markersize=8)
plt.title('original data')
plt.grid(True)
plt.show()
plt.ioff()# 開始冒泡排序并動態繪制
bubble_sort(arr.copy())  # 使用數組的副本以保留原始數組用于比較# 排序后的數組圖形繪制
plt.plot(arr, 'go-', markersize=8)  # 使用綠色表示排序后的數組
plt.title('Sorting raw data')
plt.grid(True)
plt.show()
plt.ioff()  # 關閉圖形交互模式

圖形顯示結果:
請添加圖片描述

??????總結

冒泡排序(Bubble Sort)是一種簡單直觀的排序算法,它通過重復遍歷待排序的數列,比較每對相鄰元素的大小,并在必要時交換它們的位置。以下是冒泡排序的幾個關鍵點總結:

1??算法原理:
通過相鄰元素的比較和交換,使得每一輪遍歷后,數列中的最大(或最小)元素“冒泡”到它應該在的位置。

2??穩定性:
冒泡排序是一種穩定的排序算法,因為它不會改變相同元素之間的相對順序。

3??時間復雜度:
最好情況(已經是排序狀態):O(n),只需要遍歷一次就發現沒有元素交換,立即結束。
最壞情況(完全逆序):O(n^2),需要進行n-1次遍歷。
平均情況:O(n^2)。

4??空間復雜度:
空間復雜度為O(1),因為它是一種原地排序算法,不需要額外的存儲空間。
實現方式:

可以使用兩次嵌套循環實現,外層循環控制遍歷次數,內層循環進行相鄰元素的比較和交換。

??????如果喜歡這篇文章的話

🙏大大們可以動動發財的小手:
👉👉👉 點贊:👍收藏:??評論:??👈👈👈

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

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

相關文章

Apache POI、EasyPoi、EasyExcel

目錄 ?編輯 (一)Apache PoI 使用 (二)EasyPoi使用 (三)EasyExcel使用 寫 讀 最簡單的讀? 最簡單的讀的excel示例? 最簡單的讀的對象? (一)Apache PoI 使用 (二&…

golang go-bindata打包配置文件嵌入到二進制文件

go-bindata打包配置文件嵌入到二進制文件 項目中難免會用到一些靜態資源和配置文件,但是常規打包的二進制文件無法再其他目錄正常運行(靜態資源和配置文件不存在) 有類似需求的可以安裝使用:go-bindata進行編譯處理配置文件 go-bi…

train_encoder_decoder.py

train_encoder_decoder.py from __future__ import print_function #為了確保代碼同時兼容Python 2和Python 3版本中的print函數# 導入標準庫和第三方庫 import os.path #導入了Python的os.path模塊,用于處理文件和目錄路徑 from os import path #從os模塊中導入了…

【場景題】數據庫優化和接口優化——異步思想

理解 異步處理: 對于耗時的操作,可以考慮使用異步處理方式來提升接口的響應速度。用戶可以在不阻塞當前操作的情況下,等待異步操作的結果。 異步處理在數據庫優化中的應用 雖然數據庫操作本身(如查詢、插入、更新等&#xff09…

Git 安裝

目錄 Git 安裝 Git 安裝 在使用 Git 前我們需要先安裝 Git。Git 目前支持 Linux/Unix、Solaris、Mac 和 Windows 平臺上運行。Git 各平臺安裝包下載地址為:http://git-scm.com/downloads 在 Linux 平臺上安裝(包管理工具安裝) 首先&#xff0…

IIS在Windows上的搭建

📑打牌 : da pai ge的個人主頁 🌤?個人專欄 : da pai ge的博客專欄 ??寶劍鋒從磨礪出,梅花香自苦寒來 目錄 一 概念: 二網絡…

深入理解C++中的鎖

目錄 1.基本互斥鎖(std::mutex) 2.遞歸互斥鎖(std::recursive_mutex) 3.帶超時機制的互斥鎖(std::timed_mutex) 4.帶超時機制的遞歸互斥鎖(std::recursive_timed_mutex) 5.共享…

【python腳本】批量檢測sql延時注入

文章目錄 前言批量檢測sql延時注入工作原理腳本演示 前言 SQL延時注入是一種在Web應用程序中利用SQL注入漏洞的技術,當傳統的基于錯誤信息或數據回顯的注入方法不可行時,例如當Web應用進行了安全配置,不顯示任何錯誤信息或敏感數據時&#x…

【TS】TypeScript 原始數據類型深度解析

🌈個人主頁: 鑫寶Code 🔥熱門專欄: 閑話雜談| 炫酷HTML | JavaScript基礎 ?💫個人格言: "如無必要,勿增實體" 文章目錄 TypeScript 原始數據類型深度解析一、引言二、基礎原始數據類型2.1 boolean2.2 …

蒼穹外賣--sky-take-out(四)10-12

蒼穹外賣--sky-take-out(一) 蒼穹外賣--sky-take-out(一)-CSDN博客?編輯https://blog.csdn.net/kussm_/article/details/138614737?spm1001.2014.3001.5501https://blog.csdn.net/kussm_/article/details/138614737?spm1001.2…

Unity動畫系統(2)

6.1 動畫系統基礎2-3_嗶哩嗶哩_bilibili p316 模型添加Animator組件 動畫控制器 AnimatorController AnimatorController 可以通過代碼控制動畫速度 建立動畫間的聯系 bool值的設定 trigger p318 trigger點擊的時候觸發,如喊叫,開槍及換子彈等&#x…

在js中如何Json字符串格式不對,如何處理

如果 JSON 字符串格式不正確,解析它時會拋出異常,但我們可以嘗試盡可能提取有效的信息。以下是一個方法,可以使用正則表達式和字符串操作來提取部分有效的 JSON 內容,即使整個字符串無法被 JSON.parse 完全解析。 示例代碼如下&a…

錯誤 [WinError 10013] 以一種訪問權限不允許的方式做了一個訪問套接字的嘗試 python ping

報錯提示:錯誤 [WinError 10013] 以一種訪問權限不允許的方式做了一個訪問套接字的嘗試 用python做了一個批量ping腳本,在windows專業版上沒問題,但是到了windows服務器就出現這個報錯 解決方法:右鍵 管理員身份運行 這個腳本 …

sql拉鏈表

1、定義:維護歷史狀態以及最新數據的一種表 2、使用場景 1、有一些表的數據量很大,比如一張用戶表,大約1億條記錄,50個字段,這種表 2.表中的部分字段會被update更新操作,如用戶聯系方式,產品的…

compute和computeIfAbsent的區別和用法

compute和computeIfAbsent都是Map接口中的默認方法&#xff0c;用于在映射中進行鍵值對的計算和更新。它們的主要區別在于它們的行為和使用場景。 compute 方法 定義: V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction);參數: k…

在 WebGPU 與 Vulkan 之間做出正確的選擇(Making the Right Choice between WebGPU vs Vulkan)

在 WebGPU 與 Vulkan 之間做出正確的選擇&#xff08;Making the Right Choice between WebGPU vs Vulkan&#xff09; WebGPU 和 Vulkan 之間的主要區別WebGPU 是什么&#xff1f;它適合誰使用&#xff1f;Vulkan 是什么&#xff1f;它適合誰使用&#xff1f;WebGPU 和 Vulkan…

修改CentOS7 yum源

修改CentOS默認yum源為阿里鏡像源 備份系統自帶yum源配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下載ailiyun的yum源配置文件 CentOS7 yum源如下&#xff1a; wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun…

AI領域最需要掌握的技術是什么?

在AI領域&#xff0c;掌握一系列核心技術和相關知識是非常重要的&#xff0c;以下是AI專業人士最需要掌握的一些關鍵技術&#xff1a; 1. **數學基礎** - 線性代數&#xff1a;用于處理向量和矩陣&#xff0c;是機器學習和深度學習的基石。 - 微積分&#xff1a;用于理解函數的…

SpringBoot項目使用WebSocket提示Error creating bean with name ‘serverEndpointExporter‘

問題描述&#xff1a;WebSocket在Controller中正常工作&#xff0c;但是在之后使用SpringBootTest進行單元測試的時候&#xff0c;突然提示WebSocket的相關錯誤。 錯誤提示&#xff1a; Exception encountered during context initialization - cancelling refresh attempt: …

項目中的代碼記錄日常

項目中的代碼記錄日常 /// <summary> /// 修改任務狀態 /// </summary> private void StartProcess21() {Process21Task new Thread(() >{while (CommonUtility.IsWorking){try{if (tPAgvTasksList.Count > 0){Parallel.ForEach(tPAgvTasksList, new Paral…