排序演算法 氣泡排序及優化 Java實現

2021-09-25 02:48:25 字數 1368 閱讀 8279

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

1.1 演算法描述

1.2 **演示

基本的氣泡排序:

/**

* 氣泡排序寫法一 從小到大 公升序 平均時間複雜度:o(n²) 最佳時間複雜度:o(n²) 空間複雜度(1)

* @param array

*/public static void bubblesort01(int array)

//臨時變數用於儲存資料

int temp = 0;

//外層迴圈控制迴圈次數

for(int i=0;iarray[j+1])}}

}

改進一:增加標誌

/**

* 氣泡排序寫法二 改進版,增加flag標誌 從大到小 降序 平均時間複雜度:o(n²) 最佳時間複雜度:o(n) 空間複雜度(1)

* @param array

*/public static void bubblesort02(int array)

//臨時變數

int temp = 0;

//標誌變數

boolean flag = true;

//外層迴圈控制迴圈次數

for(int i=0;i改進二:再增加無序陣列邊界

/*** 再次進行改進 增加記錄無序陣列邊界 從大到小 降序 平均時間複雜度:o(n²) 最佳時間複雜度:o(n) 空間複雜度(1)

* @param array

*/public static void bubblesort03(int array)

//定義臨時變數儲存資料 最後無序的索引

int temp,lastchangeindex=0;

//定義排序邊界

int sortborder = array.length - 1;

//定義標誌變數

boolean flag = true;

for(int i=0;iarray[j+1])

}//無序陣列邊界最後的值為下次迴圈的閾值

sortborder = lastchangeindex;}}

時間複雜度什麼時候為o(n)?

當陣列本身有序時

空間複雜度為什麼是o(1)?

不遞迴都為1

氣泡排序是否穩定?

穩定什麼是穩定的排序?

如果a=b,排序前a在b前面,排序後a仍然在b前面,則是穩定的排序。如果a可能跑到了b後面,則排序是不穩定的。

氣泡排序演算法及優化

氣泡排序是一種典型的交換排序演算法,通過交換資料元素的位置進行排序。從序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大 小 的資料元素交換到了佇列的隊尾,從而成為有序序列的一部分 下一次繼續這個過程,直到所有資料元素都排好序。演算法的核心在於每次通過兩兩比較交換位置,選出剩餘無序序列裡最...

氣泡排序及演算法優化

用雙重迴圈來控制,當相鄰元素不滿足要求的順序排列 從小到大或從大到小 時,就將兩元素交換位置,以此逐漸遍歷。void bubblesort int array long endtime system.currenttimemillis 列印排序後的前10個數 for int i 0 i 10 i s...

氣泡排序演算法及優化

正常的兩兩交換實現 private static void sort1 int a time system.out.println 跑了 time 次 system.out.println arrays.tostring a 當陣列後面的排好過後就不在執行實現 private static void...