資料結構排序演算法之氣泡排序詳解(java實現)

2021-08-14 03:04:25 字數 2051 閱讀 4625

說起氣泡排序應該沒有幾個人不知道吧,今天來總結一下氣泡排序的知識。
氣泡排序:比較兩個元素,如果不有序,則交換位置。每迴圈一次都會有某個元素放到恰到的位置。

另一種說法:

兩兩比較資料列表中的相鄰的兩項,滿足條件,交換位置。每一輪迴圈中都會有乙個元素放到指定的位置上,直到有序為止;

1,基礎氣泡排序

2,改進氣泡排序

3,進一步改進的氣泡排序

說明: 這裡分類沒有嚴格的意義,只是用來說明對氣泡排序改進的的一種說明。

建議大家寫氣泡排序使用3,相對來說效率高一下。

時間複雜度:o(n^2)

輔助空間:o(1)

穩定性:穩定

1.基礎氣泡排序實現
/**

* 基礎氣泡排序 (公升序)

*/private

void

bubblesort(int ints) }}

}

測試類:

@test

public

void

test() ;

bubblesort(ints);

arrays.stream(ints).foreach(system.out::println);

}

測試結果:

5812

3178

99

2.改進的氣泡排序

改進說明:

定義乙個標識變數來標誌一次迴圈中有沒有交換位置,如果在一次迴圈中沒有交換位置,此時說明資料集合中已經有序,直接跳出迴圈即可。 

這樣可以避免內部迴圈多次判斷,提高效率。

/**

* 改進氣泡排序 (公升序)

*/private

void

bubblesort1(int ints)

}//沒有交換,說明現在已經是有序的,直接跳出迴圈

if (!flag)

}}

測試**:

@test

public

void

test() ;

//bubblesort(ints);

bubblesort1(ints);

//bubblesort2(ints);

arrays.stream(ints).foreach(system.out::println);

}

測試結果:

5812

3178

99

3.進一步改進的氣泡排序 (建議使用這個)

改進思想:

可以使用乙個變數記錄每次交換的最後位置,因為交換最後位置後面的元素都已經是有序的了,不需要在進行排序。預設交換的位置為資料集合的最後乙個位置。

這樣可以提高內部迴圈的效率,從而提高氣泡排序的整體效率。

/**

* 進一步改進的氣泡排序 (公升序)

* */

private

void

bubblesort2(int ints)

}if (!flag)

}}

測試**:

@test

public

void

test() ;

//bubblesort(ints);

//bubblesort1(ints);

bubblesort2(ints);

arrays.stream(ints).foreach(system.out::println);

}

測試結果:

5812

3178

99

平時我們使用氣泡排序盡量使用我們改進過的,這樣可以提高效率。

資料結構 排序之冒泡演算法

初級版本 交換排序,不滿足兩兩相鄰比較,讓每乙個關鍵字和它後面的每乙個比較 效率低 public void bubble 1 int arr print arr arr 標準版本 public void bubble 2 int arr print arr arr 優化版本1 避免已經有序的情況下無...

資料結構排序演算法之氣泡排序法

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

資料結構 排序 氣泡排序演算法

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