氣泡排序 python描述

2021-09-12 08:39:41 字數 2411 閱讀 6038

原文:

氣泡排序,有時也稱為下沉排序,是一種簡單的排序演算法,它反覆遍歷要排序的列表,比較沒對相鄰的專案,如果它們的順序不滿足條件則交換它們。重複遍歷列表,知道不需要交換,這時列表就是已排序的。其核心思想是:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序記錄為止。

比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個;

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;

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

重複1~3,直到排序完成。

**實現

import copy

import time

class

bubblesort

(object):

def__init__

(self,li=

none):

self.

list

= li

defswap

(self,li,i,j)

:"""

交換元素,i,j表示下標

"""li[i]

,li[j]

= li[j]

,li[i]

defbubble_sort_******

(self)

:"""

簡單氣泡排序,時間複雜度o(n^2)

"""start = time.clock(

) li = copy.deepcopy(self.

list

) length =

len(li)

for i in

range

(length)

:for j in

range

(i +

1, length)

:# 倒序(length-1)

if li[i]

> li[j]

: self.swap(li, i, j)

end = time.clock(

)print

("執行時間為:%s,排序後序列為:%s"

%(end-start)

,li)

defbubble_sort

(self)

:"""

氣泡排序,時間複雜度o(n^2)

"""start = time.clock(

) li = copy.deepcopy(self.

list

) length =

len(li)

for i in

range

(length)

:for j in

range

(length -

1- i)

:if li[j]

> li[j +1]

: self.swap(li, j, j +1)

end = time.clock(

)print

("執行時間為:%s,排序後序列為:%s"

%(end-start)

,li)

defbubble_sort_advance

(self)

:"""

改進後的氣泡排序,時間複雜度o(n^2)

設定乙個flag,當某一輪沒有發生變化時,證明排序已經有序了。

"""start = time.clock(

) li = copy.deepcopy(self.

list

) length =

len(li)

for i in

range

(length)

: flag =

true

for j in

range

(length -

1- i)

:if li[j]

> li[j +1]

: self.swap(li, j, j +1)

flag =

false

if flag:

break

end = time.clock(

)print

("執行時間為:%s,排序後序列為:%s"

%(end-start)

,li)

if __name__ ==

"__main__"

: li =[5

,3,2

,7,1

,4,6

,9,8

] bs = bubblesort(li)

bs.bubble_sort_******(

) bs.bubble_sort(

) bs.bubble_sort_advance(

)

python描述氣泡排序

氣泡排序 bubble sort 是一種基於交換的排序演算法。重複地遍歷數列,一次比較兩個元素,如果它們的順序錯誤就將其交換。氣泡排序的具體原理如下 比較相鄰的元素。如果第乙個比第二個大,就交換二者 對每一對相鄰元素做同樣的操作,從開始第一對到結尾的最後一對。這步操作後,最後的元素即為最大的數。針對...

氣泡排序(線性描述)

氣泡排序 線性描述 快速排序 線性描述 建設中 總結 這是排序演算法家族中最簡單的演算法,自信的面對他吧。讓我們開始吧 氣泡排序的原理即為遍歷整個陣列,每當遇到後乙個數比前乙個數字更小的情況便交換兩者的值。由此看來最壞的情況便是類似a 6 的情況。我們來分析一下執行過程。首先發現5 6,交換,a 6...

簡明演算法 氣泡排序 javascript描述

懶惰了很久,人有點生鏽,所以寫個演算法系列讓自己腦筋活躍起來。所有範例一律從小到大排序 氣泡排序 給定陣列 var list 54,26,93,17,77,31,44,88,55,20 演算法描述 將第乙個元素與第二個元素對比,此時第乙個元素比第二個元素大,交換他們,這樣較大的元素就位於第二個位置了...