Python實現冒泡排序

一、冒泡排序簡介

冒泡排序(Bubble Sort)是一種簡單的排序演算法,它重複地遍歷要排序的列表,每次比較相鄰的兩項,如果它們的順序錯誤就交換它們,直到沒有要交換的項為止。冒泡排序演算法的時間複雜度為 O(n²)。

二、冒泡排序實現思路

冒泡排序演算法的實現思路可以用以下的步驟來描述:

1、比較相鄰的元素,如果第一個比第二個大,就交換它們的位置;

2、對每一對相鄰的元素都進行步驟1的工作,從開始第一對到結尾最後一對,這樣在最後的元素應該會是最大的數;

3、針對所有的元素重複以上的步驟,除了最後一個;

4、持續每次對越來越少的元素重複上述步驟,直到沒有任何一對數字需要比較為止。

三、Python實現代碼

def bubble_sort(arr):
    n = len(arr)
    # 遍歷所有數組元素
    for i in range(n):
        # Last i elements are already in place
        for j in range(0, n-i-1):
            # traverse the array from 0 to n-i-1
            # Swap if the element found is greater
            # than the next element
            if arr[j] > arr[j+1] :
                arr[j], arr[j+1] = arr[j+1], arr[j]

四、代碼解析

1、定義bubble_sort函數,傳入一個參數arr,表示待排序的數組;

2、定義變數n,表示數組的長度;

3、通過兩個for循環遍曆數組,外層循環遍曆數組的所有元素,內層循環則遍曆數組中前n-i-1個元素,因為最後的n-i-1個元素已經排好序了;

4、當發現arr[j]比arr[j+1]大時,交換這兩個元素的位置;

5、最終,得到一個有序的數組。

五、演算法優化

冒泡排序演算法雖然簡單,但是時間複雜度比較高,因此需要對演算法進行優化。

1、設置標誌位

如果在某次遍歷中,沒有任何元素被交換,說明數組已經有序,可以停止遍歷。

def bubble_sort(arr):
    n = len(arr)
    # 遍歷所有數組元素
    for i in range(n):
        # Last i elements are already in place
        flag = True
        for j in range(0, n-i-1):
            # traverse the array from 0 to n-i-1
            # Swap if the element found is greater
            # than the next element
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                flag = False
        # 如果遍歷中沒有任何元素被交換,說明數組已經有序,可以停止遍歷。
        if flag:
            break

2、優化搜索範圍

對於傳統的冒泡排序,在每一輪遍歷時都要比較整個數組,這樣即使數組已經有序,仍然要進行n次遍歷。而如果每次遍歷時記錄最後一次交換的位置,那麼後面的元素就已經有序了,可以減少比較次數。

def bubble_sort(arr):
    n = len(arr)
    # 遍歷所有數組元素
    for i in range(n):
        # Last i elements are already in place
        flag = True
        # 記錄最後一次元素交換的位置
        k = n - 1
        for j in range(0, k):
            # traverse the array from 0 to n-i-1
            # Swap if the element found is greater
            # than the next element
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                # 更新最後一次元素交換的位置
                k = j
                flag = False
        # 如果遍歷中沒有任何元素被交換,說明數組已經有序,可以停止遍歷。
        if flag:
            break

六、總結

冒泡排序是一種簡單有效的排序演算法,但是時間複雜度比較高,需要使用優化手段來提高效率。Python實現冒泡排序的代碼也比較簡單,可以方便地進行調試和優化。

原創文章,作者:GXQVW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/333450.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
GXQVW的頭像GXQVW
上一篇 2025-02-01 13:34
下一篇 2025-02-01 13:34

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python編程二級證書考試相關現已可以上網購買

    計算機二級Python考試是一項重要的國家級認證考試,也是Python編程的入門考試。與其他考試一樣,Python編程二級證書的考生需要進入正式考試,而為了備考,這篇文章將詳細介紹…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論