排序演算法之氣泡排序

2021-09-20 06:18:33 字數 2191 閱讀 9498

氣泡排序(bubble sort),是一種電腦科學領域的較簡單的排序演算法。

它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序(如從》 大到小、首字母從a到z)錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。

這個演算法的名字由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端(公升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名「氣泡排序」。

一.基本思想

兩個數比較大小,如果前乙個數大於第二個數,就交換位置

二.過程

比較相鄰兩個數的大小,如果第二個數小,就交換位置

從前往後兩兩比較,直接最後兩個資料,這樣每輪就可以確定乙個最大的數字

繼續重複上面的操作,依次將所有資料排好位置即可

假設陣列為arr=

1.:第一趟排序

我們根據之前的描述,進行第一輪的排序

int temp;

//第一位和第二位比

if(arr[0]

> arr[1]

)//第二位和第三位比

if(arr[1]

> arr[2]

)//第三位和第四位比

if(arr[2]

> arr[3]

)//第四位和第五位比

第一輪排序後陣列的順序為,第一輪排序後最大的數字就在最後面了

2.:第二趟排序

此時,我們可以根據第一輪排序的結果,再次進行排序,因為最大值已經在陣列最後乙個元素的,所以我們就不用去比較最後乙個元素了。

int temp;

//第一位和第二位比

if(arr[0]

> arr[1]

)//第二位和第三位比

if(arr[1]

> arr[2]

)//第三位和第四位比

第二輪排序後陣列的順序為,至此,排序完成

三.:總結

我們從上面的的**可以總結出來:

總共有5個數,第一趟**我們比較了4次

第二趟**我們比較了三次

再從上面的規律可以總結出:5位數的陣列需要4趟排序的,每趟排序之後次數減1(因為前一趟已經把前一趟數的最大值確定下來了)!

因為我使用的測試用例的資料並不是太混亂,所有只用了兩趟排序就排序完成了.

我們可以根據for迴圈將上面的**簡化:

/**

* 氣泡排序

* @param arr 需要排序的陣列

*/public

static

void

bubblesort

(int

arr)}}

}

四.氣泡排序的優化問題從上面的例子可以看出,5個元素,我們只使用了兩趟就排好序了.

但是程式依然會進行第

三、第四趟排序,這是完全沒有必要的,所有我們可以設定乙個flag,如果這趟沒有任何交換,則說明陣列已經是有序的了

**如下:

/**

* 氣泡排序

* @param arr 需要排序的陣列

*/public

static

void

bubblesort

(int

arr)

}//無資料交換,提前退出if(

!flag)

break;}

}

五.結論六、其他排序排序演算法大集合:

排序演算法之氣泡排序

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

排序演算法之氣泡排序

對於大多數學計算機的人來說,氣泡排序應該都是接觸的第一種排序方式,氣泡排序的排序思想是比較簡單的,它的演算法的是 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了...

排序演算法之氣泡排序

氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端,...