說起氣泡排序應該沒有幾個人不知道吧,今天來總結一下氣泡排序的知識。
氣泡排序:比較兩個元素,如果不有序,則交換位置。每迴圈一次都會有某個元素放到恰到的位置。
另一種說法:
兩兩比較資料列表中的相鄰的兩項,滿足條件,交換位置。每一輪迴圈中都會有乙個元素放到指定的位置上,直到有序為止;
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個專...