問題提出:
將以下資料公升序排列:9, 2, 8, 6, 4
氣泡排序原理:
氣泡排序就是遍歷資料,每次只與下乙個數字比較,如果這兩個數順序不對,則與交換過來。
就上面那個問題來說,因為要公升序排列,所以數字越大越排在後面。則兩個數比較的時候,如果後乙個數比當前數小,則順序不對,要將這兩個數交換。遍歷的過程如下圖:
第一次比較第一和第二個數字,9與2相比較,9比2大,順序不對,則交換位置。
第二次比較第二與第三個數字,因為9換到了第二位,則9與8比較,9大,順序不對,則交換位置。
以此類推,最後9就像泡泡一樣公升到了最後一位,我們稱這樣為一趟,這一趟裡面有多次比較。
由於一趟只歸為乙個數,則如果有n個數字,則需要進行n-1趟。
因為歸位後的數字不用再比較了,所以每趟只需要比較n-1-i次(i為已執行的趟數)。
由上可以得出氣泡排序的關鍵步驟是兩個迴圈:
1python實現:根據上述思路,用python實現也是把關鍵地方實現即可:for(i = 0; i < n-1; i++)
8 }
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
''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排序 氣泡排序
排序 氣泡排序 氣泡排序演算法的原理如下 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需...