1. 程式人生 > >python複習氣泡排序

python複習氣泡排序

氣泡排序:

思路:

先找到最大值放到最右邊:

#encoding=utf-8

 

a=[1,9,2,8,3,6,4]

print "a before change:",a

for i in range(len(a)-1):

    if a[i] > a[i+1]:

        a[i],a[i+1] = a[i+1],a[i]

print "a after change:",a

結果:

D:\>python test.py

a before change: [1, 9, 2, 8, 3, 6, 4]

a after change: [1, 2, 8, 3, 6, 4, 9]

找到最大值了,第二步找到次大值放到倒數第二個位置

 

 

#encoding=utf-8

 

a= [1, 2, 8, 3, 6, 4, 9]

 

for i in range(len(a)-1-1):

    if a[i] > a[i+1]:

        a[i],a[i+1] = a[i+1],a[i]

print "a after change:",a

結果:  

D:\>python test.py

a before change: [1, 2, 8, 3, 6, 4, 9]

a after change: [1, 2, 3, 6, 4, 8, 9]

 

找到倒數第二大的值了

 

第三步找到倒數第三大的數放到倒數第三個位置

a=[1, 2, 3, 6, 4, 8, 9]

print "a before change:",a

 

 

for i in range(len(a)-1-1-1):

    if a[i] > a[i+1]:

        a[i],a[i+1] = a[i+1],a[i]

print "a after change:",a

結果:

D:\>python test.py

a before change: [1, 2, 3, 6, 4, 8, 9]

a after change: [1, 2, 3, 4, 6, 8, 9]

 

依次類推,最後可以把整個列表排好序

從整體的過程來看,每次迴圈做的事情基本一樣,從左到右依次用當前位置的數和

後邊的數做比較,如果前邊的數大,就把兩個數換位置,迴圈結束後可以得到所迴圈的樹中最大的數

每一次迴圈不一樣的是迴圈所遍歷資料長度都比上一次少一個,一共需要迴圈的次數是列表a的長度,那麼把這六次迴圈寫到一起就可以變成兩層迴圈

外邊的迴圈控制迴圈的次數即6次,i的變化值是0,1,2,3,4,5,即range(len(a)-1)

裡邊的迴圈控制每次迴圈的長度,每次長度減少1,j變化值是6次,5次,4次,3次,2次,1次,即每次為range(len(a)-i-1)次

迴圈每次做的事情不動改變

即:

#encoding=utf-8

 

a=[1,9,2,8,3,6,4]

print "a before change:",a

 

for i in range(len(a)-1):

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

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

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

print "a after change:",a

結果:

D:\>python test.py

a before change: [1, 9, 2, 8, 3, 6, 4]

a after change: [1, 2, 3, 4, 6, 8, 9]