Python排序演算法之氣泡排序

2021-09-27 12:01:28 字數 1730 閱讀 6494

比較列表相鄰的兩個值,如果前面比後面大,則交換這兩個值。

每一趟氣泡排序,無序區減少乙個數,有序區增加乙個數。

最壞情況:o(n

2n^2

n2)平均情況:o(n

2n^2

n2)最好情況:o(n)

o(1)

穩定

簡單

趟數:n - 1

無序區範圍:0 ~ n - 趟數 - 1

在一趟氣泡排序完成後,如果沒有發生任何的交換,

則認為列表已經是有序的,可以直接結束演算法。

#!/usr/bin/python3

# -*- coding: utf-8 -*-

"""氣泡排序

比較列表每相鄰的兩個數,如果前面比後面大,則交換這兩個數。

一趟排序完成後,無序區減少乙個數,有序區增加乙個數。

時間複雜度:o(n^2)

關鍵點:趟(n - 1);無序區範圍(n - 趟數 - 1)

優化: 在氣泡排序的一趟排序完成後,如果沒有發生任何的交換,

則認為列表已經是有序的,可以直接結束演算法。

"""import random

defbubble_sort

(ls, reverse=

false):

"""氣泡排序

args:

:param ls: list, 待排序的列表

:param reverse: bool, 公升序還是降序,預設公升序

"""length =

len(ls)

# 決定是公升序還是降序

# symbol =

# default_symbol = symbol['gt']

# if reverse:

# default_symbol = symbol['lt']

# con_tpl = f'ls[j] ls[j + 1]'

for i in

range

(length -1)

:# 趟數

exchange =

false

# 標誌位,是否進行了交換

for j in

range

(length - i -1)

:# 無序區範圍

# if eval(con_tpl):

if ls[j]

> ls[j +1]

: ls[j]

, ls[j +1]

= ls[j +1]

, ls[j]

exchange =

true

# 進行了交換

ifnot exchange:

return

ls =

[random.randint(0,

100)

for _ in

range(10

)]print

(ls)

bubble_sort(ls, reverse=

true

)print

(ls)

Python排序演算法之氣泡排序

顧名思義,氣泡排序直觀的意思是氣泡越大冒的越快 對應到我們的列表中就是數字最大的先選出來,然後依次進行。例如 mylist 1,4,5,0,6 比較方式為 相鄰的兩個數字先進行比較,也就是mylist 0 和mylist 1 發現不是 的關係,就繼續比較mylist 1 和mylist 2 依次進行...

排序演算法之python氣泡排序

氣泡排序是一種交換排序 比較相鄰的連個關鍵字,把大的往後放,小的就向前移動,即冒泡 def bubblesort input list 如果待排序列為空,則直接返回空列表 if len input list 0 return sorted list input list for i in range...

排序演算法(python) 之 氣泡排序

比較相鄰的兩個元素,若前乙個大於後乙個則交換 對每一對相鄰元素進行比較,直至最後一對元素。重複上述步驟,知道排序完成。這為向上冒泡。向下冒泡同理。1 向上冒泡 m input split n int m i for i in range len m 輸入的陣列 for i in range len ...