經典排序演算法 氣泡排序

2021-10-07 14:10:16 字數 1662 閱讀 2346

對列表的無序部分從頭至尾掃瞄一遍,掃瞄過程中通過不斷交換相鄰兩個元素,最終把最大(小)元素交換到列表末尾。

首先比較第一和第二個數,把較大的放在第二位。

比較第二個和第三個數,再把較大的數放在第三位。

… …如此比較下去,直到比較完最後兩個數。這樣就把整個列表中最大的數交換到了末尾。

上面三步只是完成了對列表無序部分(一開始認為整個列表都是無序的)的一趟掃瞄,接下來我們將對列表剩下的無序部分按照上三步重複操作,每掃瞄一次都會把無序部分的最大值交換到排序部分的末尾,最終就會把所有元素按從小到大的順序排列。

排序無序陣列 [10,1,35,61,89,36,55],案例**於此部落格。

第一趟排序

第一次比較:10 和1 比較,10大於1 ,兩者交換位置,把10放1後面。 [1,10,35,61,89,36,55]

第二次比較:10和35比較,10小於35,兩者不交換位置。 [1,10,35,61,89,36,55]

第三次比較:35和61比較,35小於61,兩者不交換位置。 [1,10,35,61,89,36,55]

第四次比較:61和89比較,61小於89,兩者不交換位置。[1,10,35,61,89,36,55]

第五次比較:89和36比較,89大於36,兩者交換位置。 [1,10,35,61,36,89,55]

第六次比較:89和55比較,89大於55,兩者交換位置。[1,10,35,61,36,55,89]

經過第一趟6次比較後成功將無序部分的最大元素89交換到了陣列末尾。

第二趟排序

接下來對剩下的6個無序元素按照上述比較規則重新排序,把它們當中的最大值61放到無序部分末尾(即陣列倒數第二位)。

… …依照此法排序,經過6趟排序後就可將此陣列排序完成。下圖展示了每掃瞄一遍陣列無序部分後陣列的整體情況:

結合整個排序過程,可以得到:若陣列

待排序部

分元素個

數為n,

則將其排

序完畢需

要掃瞄n

−1次。

第k次掃

描時需要

比較相鄰

元素n−

k次。\color若陣列待排序部分元素個數為n,則將其排序完畢需要掃瞄n-1次。第k次掃瞄時需要比較相鄰元素n-k次。

若陣列待排序

部分元素

個數為n

,則將其

排序完畢

需要掃瞄

n−1次

。第k次

掃瞄時需

要比較相

鄰元素n

−k次。

實現**選擇scala語言。外層for迴圈控制掃瞄次數(n-1次),其取值範圍為:[0,n-1),內層迴圈控制每次掃瞄時元素比較次數(n-k次),其取值範圍為:[0,n-k)。

def bubblesort

(array: array[int]

): unit =}}

}

排序乙個有n個元素的無序陣列,最壞情況下需要比較: (n-1)+(n-2)+…+1 = (n-1) *(n-1+1) / 2 次,所以時間複雜度為o(n^2)

經典排序演算法,氣泡排序

氣泡排序是本人在大一學習c語言的時候就已經學過了,最近這段時間想起來把比較經典的排序演算法拿來回顧一下,鞏固一下知識。氣泡排序的核心就是比較相鄰兩個數的大小,然後將小的 或者大的 放到前面去,經過一趟之後,就能把最小或者最大的放到最前面,第二趟排序的時候,第乙個數不參與排序,從第二個數開始,經過一趟...

經典排序演算法 氣泡排序

氣泡排序的原理是從第乙個數字開始,依次讓相鄰的兩個數字進行比較,按照從大到小或從小到大的順序進行交換 如果是公升序排列就把小的放前面,如果降序排列就把大的放前面 第一趟比較後,就把最大的的數字放在最後乙個位置 假設按照公升序排列 然後進行第二趟比較,依次進行相鄰數字比較,第二趟比較後次大的數字放在了...

經典排序演算法 氣泡排序

在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大 的數往下沉 較小的往上冒。即 每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。關於程式中4中氣泡排序寫法的說明 bubble sort1 基本的氣泡排序的寫法。bubble so...