前言
算法步驟:
?代碼實現
方法一、嵌套循環
方法二 while循環
?方法三、使用生成器表達式
解釋:
時間復雜度:
?完結撒花
前言
冒泡排序是一種簡單的排序算法,它也是一種穩定排序算法。其實現原理是重復掃描待排序序列,并比較每一對相鄰的元素,當該對元素順序不正確時進行交換。一直重復這個過程,直到沒有任何兩個相鄰的元素可以交換,就表明完成了排序。
算法步驟:
- 從列表的第一個元素開始,比較它與下一個元素。
- 如果第一個元素大于第二個元素,則交換它們的順序。
- 繼續比較相鄰元素,直到到達列表的末尾。
- 重復步驟 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版的冒泡排序法的算法題,通過練習,才可以提升在編程中的編碼能力和邏輯思維能力。
??如果對博主感興趣歡迎大家點贊+關注,添加博主聯系方式一起探索哦!