冒泡排序

什么是冒泡排序?

冒泡排序(Bubble Sort)是一種簡單的排序算法。它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。

這個算法的名字由來是因為越大的元素會經由交換慢慢“浮”到數列的頂端,故名冒泡排序。

冒泡排序實現原理

冒泡排序算法的運作如下:(從后往前)

1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數。

3.針對所有的元素重復以上的步驟,除了最后一個。

4.持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。

示意圖:

性能分析:

若記錄序列的初始狀態為"正序",則冒泡排序過程只需進行一趟排序,在排序過程中只需進行n-1次比較,且不移動記錄;反之,若記錄序列的初始狀態為"逆序",則需進行n(n-1)/2次比較和記錄移動。因此冒泡排序總的時間復雜度為O(n*n)。

冒泡排序:穩定算法

冒泡排序的三種算法實現(優化):

1、冒泡排序 ?

/**

* 第一種直接冒泡

* @param a

*/

public static void BubbleSort1(int a[])

{

int i, j;

int temp = 0;

for (i = 0; i < a.length; i++)

for (j = 1; j < a.length - i; j++)

if (a[j - 1] > a[j]) {

temp = a[j - 1];

a[j - 1] = a[j];

a[j] = temp;

}

for (int x : a) {

System.out.print(x + "? ");

}

}

?2、標志位方法

public static void BubbleSort2(int a[]) {

int j, k;

boolean flag;

k = a.length;

flag = true;

while (flag) {

flag = false;

for (j = 1; j < k; j++)

if (a[j - 1] > a[j]) {

int temp = a[j - 1];

a[j - 1] = a[j];

a[j] = temp;

flag = true;

}

k--;

}

for (int i : a) {

System.out.print(i + " ");

}

}


3、前面無序 后面有序的情況

/**

* 前面無序 后面有序的

*/

public static void BubbleSort3(int a[]) {

int j, k;

int flag;

flag = a.length;

while (flag > 0) {

k = flag;

flag = 0;

for (j = 1; j < k; j++)

if (a[j - 1] > a[j]) {

int temp = a[j - 1];

a[j - 1] = a[j];

a[j] = temp;

flag = j;

}

}

for (int i : a) {

System.out.print(i + " ");

}

}


注:冒泡排序算法是一個效率比較低下的算法,小數據的時候無所謂,如果數據量比較大的話還是建議選擇其他算法

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容