算法術語
穩定
如果a原本在b的前面,而a=b,排序之後a依舊在b的前面
不穩定
如果a原本b的前面,而a=b,排序之後a可能出現在b的後面
內排序
所有的排序操作都在內存中完成
外排序
由於數據量大,因此把數據放入磁盤中,而排序通過磁盤和內存的數據傳輸才能進行
時間複雜度
一個算法執行所有消耗的時間
空間複雜度
運行完一個程序所需要的內存大小
冒泡排序
簡介
冒泡排序是一種簡單的排序算法。它重複的走訪過要排序的數列,一次比較兩個元
素,如果他們的排序錯誤就把她們交換過來。走訪數列的工作是重複的進行直到沒
有需要交換的爲止。這個算法的名字由來是英文越小的元素會經過交換慢慢的”浮“
到數列前端。
描述
1.比較相鄰的元素,如果第一個比第二個大,就交換他們兩個。
2.對每一對相鄰的元素做相同的操作,從開始第一對到結尾的最後一對。
這樣在最後的元素應該是最大的數字
3.針對所有的元素重複以上步驟,處了最後一個。
4.重複步驟1~3,直到排序完成。
代碼演示
/**
* 冒泡排序
* @author Mr.qian
*
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {8,1,9,2,7,4,5,3,6};
sort(arr);
}
public static void sort(int[] arr) {
//1.判空
if(arr == null || arr.length <= 1) {
return ;
}
//2.外層的for循環,是輪數。輪數等於=數組的長度-1(因爲最後一個元素不需要進行操作)
for(int i = 0; i < arr.length -1; i++) {
//3.內層循環,是兩兩數據比較和數據交換
for(int j = 0; j < arr.length-1-i; j++) {
if(arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
結論
冒泡排序 | |
---|---|
平均時間複雜度 | O(n²) |
最好情況 | O(n) |
最壞情況 | O(n²)) |
空間複雜度 | O(1) |
排序方式 | In-place (內排序) |
穩定性 | Y |