【演算法】冒泡排序

來源:互聯網
上載者:User

標籤:strong   log   nlogn   .com   nlog   分享圖片   一個   基礎   練習   

#第一次,找到最大值

n=[3,5,1,6,2]

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

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

        n[i],n[i+1]=n[i+1],n[i]

 

print (n[-1])

 

#第二次,找到次大值,放在倒數第二的位置

n=[3,1,5,2,6]

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

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

        n[i],n[i+1]=n[i+1],n[i]

 

print (n[-2])

 

 

#第三次,找第三個最大數

n=[1,3,2,5,6]

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

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

        n[i],n[i+1]=n[i+1],n[i]

 

print (n[-3])

 

 

#第四次,找第四個最大數

n=[1,2,3,5,6]

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

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

        n[i],n[i+1]=n[i+1],n[i]

 

print (n[-4])

 

 

#冒泡排序最終

a= [3,5,1,6,2]

for i in range(len(a)-1):           #0,1,2,3

    for j in range(len(a)-1-i):      #4-0;4-1;4-2;4-3

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

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

print(a)

 

 

第一次內層迴圈的結果就是找到最大的值

第二次內層迴圈的結果就是找到次大的值,本次將忽略最後一個元素的比較

第二次內層迴圈的結果就是找到第三大的值,本次講忽略倒數第二個元素和最後一個元素的比較

.......

 

1、冒泡排序圖示

 

 

 

#練習:在上面排序的基礎上,將最小的放在後面,最大的放在前面

a= [3,2,1,9,56,48,20,4,9,6,0]

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

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

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

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

 

print(a)

 

或者直接

a= [3,2,1,9,56,48,20,4,9,6,0]

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

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

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

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

 

print(a[::-1])

 

2、冒牌排序原理

冒泡排序的基本思想是,對相鄰的元素進行兩兩比較,順序相反則進行交換,這樣,每一趟會將最小或最大的元素“浮”到頂端,最終達到完全有序

3、冒泡演算法的時間複雜度

時間複雜度從小到大的排序次序為:

常數階O(1),對數階O( log n ),線性階O(n),平方階O(n^2),立方階O(n^3),...,k次方階O(n^k),指數階O(2^n)。隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。也就是:
O(1) < O(logn) < O(n) < O(nlogn)<O(n^2) < O(n^3) <…< O(n^k)<O(2^n) <O(n!)

對於演算法來講,只看影響最大的那個因子是什麼(怎麼判斷哪個因子是影響最大的?),一般忽略分母,不看分母

 

#練習:計算冒泡排序的時間複雜度

遍曆第1遍時,比較了n-1次;

遍曆第2遍時,比較了n-2次;

遍曆第3遍時,比較了n-3次;

遍曆第4遍時,比較了n-4次;

……….

遍曆第n-1遍時,比較了1次;

 

綜上,總共比較的次數為1+2+3+4+….+(n-1)=n(n-1)/2次

因為,n(n-1)/2=n^2/2-n/2

所以,他的時間複雜度為O(n^2)

【演算法】冒泡排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.