python與氣泡排序

2022-07-28 02:09:08 字數 2695 閱讀 5873

問題提出:

將以下資料公升序排列:9, 2, 8, 6, 4

氣泡排序原理:

氣泡排序就是遍歷資料,每次只與下乙個數字比較,如果這兩個數順序不對,則與交換過來。

就上面那個問題來說,因為要公升序排列,所以數字越大越排在後面。則兩個數比較的時候,如果後乙個數比當前數小,則順序不對,要將這兩個數交換。遍歷的過程如下圖:

第一次比較第一和第二個數字,9與2相比較,9比2大,順序不對,則交換位置。

第二次比較第二與第三個數字,因為9換到了第二位,則9與8比較,9大,順序不對,則交換位置。

以此類推,最後9就像泡泡一樣公升到了最後一位,我們稱這樣為一趟,這一趟裡面有多次比較。

由於一趟只歸為乙個數,則如果有n個數字,則需要進行n-1趟。

因為歸位後的數字不用再比較了,所以每趟只需要比較n-1-i次(i為已執行的趟數)。

由上可以得出氣泡排序的關鍵步驟是兩個迴圈:

1

for(i = 0; i < n-1; i++)

8 }

python實現:根據上述思路,用python實現也是把關鍵地方實現即可:

1

#假設變數已經全部定義好

2for i in range(len-1):

3for j in range(len-1-i):

4if a[j] > a[j+1]:

5 a[j], a[j+1] = a[j+1], a[j]

1

#!/usr/bin/env python2#

-*- coding:utf8 -*-

3'''

4簡介:本程式主要是用python實現氣泡排序,程式的功能是實現

5降序排列。67

8'''910

class

bubblesort(object):

11'''

12self.datas: 要排序的資料列表

13self.datas_len: 資料急的長度

14_sort(): 排序函式

15show(): 輸出結果函式

1617

用法:18

bubblesort(datas) 例項化乙個排序物件

19bubblesort(datas)._sort() 開始排序,由於排序直接操作

20self.datas, 所以排序結果也

21儲存在self.datas中

22bubblesort(datas).show() 輸出結果

23'''

24def

__init__

(self, datas):

25 self.datas =datas

26 self.datas_len =len(datas)

2728

def_sort(self):29#

氣泡排序要排序n個數,由於每遍歷一趟只排好乙個數字,30#

則需要遍歷n-1趟,所以最外層迴圈是要迴圈n-1次,而31#

每次趟遍歷中需要比較每歸位的數字,則要在n-1次比較32#

中減去已排好的i位數字,則第二層迴圈要遍歷是n-1-i次

33for i in range(self.datas_len-1):

34for j in range(self.datas_len-1-i):

35if(self.datas[j] < self.datas[j + 1]):

36 self.datas[j], self.datas[j+1] =\

37 self.datas[j+1], self.datas[j]

3839

defshow(self):

40print

'result is:',

41for i in

self.datas:

42print

i,43

print

''44

45if

__name__ == '

__main__':

46try

:47 datas = raw_input('

please input some number:')

48 datas =datas.split()

49 datas = [int(datas[i]) for i in

range(len(datas))]

50except

exception:

51pass

5253 bls =bubblesort(datas)

54bls._sort()

55 bls.show()

總結:氣泡排序因為是在原陣列上直接操作,所以它佔的空間資源較少,在資料量不大的情況還是挺好的。但是由於演算法涉及雙重迴圈,所以在資料量大的情況下,程式執行的時間是相當長的,因為要一次一次地遍歷資料。

氣泡排序 與 雙向氣泡排序

public class test if k 0 break last k public static void bidirectionalbubblesort int a last k for int m last m first m first k if first last break pub...

排序 氣泡排序 Python

依次比較相鄰兩元素的大小,順序與要求的不一致就交換。這樣會把待排序序列中的最大 最小 元素不斷 浮 到最右端,最終完成公升序或降序排列。對序列 2,4,1,3,6,5 按公升序排列 只記錄有交換發生的迴圈 第一次迴圈 2,4,1,3,6,5 2,1,4,3,6,5 2,1,3,4,6,5 2,1,3...

Python排序 氣泡排序

排序 氣泡排序 氣泡排序演算法的原理如下 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需...