讀者大大們好呀!!!??????
![]()
👀期待大大的關注哦??????
🚀歡迎收看我的主頁文章??木道尋的主頁
文章目錄
- 🔥前言
- 🚀冒泡排序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),因為它是一種原地排序算法,不需要額外的存儲空間。
實現方式:
可以使用兩次嵌套循環實現,外層循環控制遍歷次數,內層循環進行相鄰元素的比較和交換。
??????如果喜歡這篇文章的話
🙏大大們可以動動發財的小手:👉👉👉 點贊:👍收藏:??評論:??👈👈👈