冒泡排序(平均時間複雜度O(n²))
按照從小到大排序
從左到右,數組中相鄰的兩個元素進行比較,交換位置,將較大的放到後面。
每一輪都能拍出一個最大值,總共需要n-1輪
比如:[2,5,4,9,8,7]
int[] a = {2, 5, 3, 9, 6, 8};
//第一次層循環控制輪數,最差n-1輪
for (int i = 0; i < a.length - 1; i++) {
//內層控制比較的次數
// a.length -1 -i(剩餘需要比較的次數)
for (int j = 0; j < a.length - 1 - i; j++) {
if(a[j] > a[j + 1]){
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(a));
選擇排序(平均時間複雜度O(n²))
從第一個位置開始比較,找出最小的,和第一個位置互換,開始下一輪
int[] a = {2, 5, 3, 9, 6, 8};
//第一次層循環控制輪數,最差n-1輪
for (int i = 0; i < a.length - 1; i++) {
//假設第一個是最小的
int index = i;
//內層控制比較的次數
// j = i + 1是當前第j個未排的開始
for (int j = i + 1; j < a.length; j++) {
if (a[j] < a[index]) {
index = j;
}
}
if (index != i) {//最小值不在當前假設位置需要交換
int temp = a[i];
a[i] = a[index];
a[index] = temp;
}
}
System.out.println(Arrays.toString(a));
冒泡排序和選擇排序的比較
①冒泡排序實在比較的過程中交換,可能所有的位置都動過
選擇排序是先記錄下位置,然後在這一輪比較結束後再交換位位置
②冒泡排序優缺點:優點:比較簡單,空間複雜度較低,是穩定的;
缺點:時間複雜度太高,效率慢;
選擇排序優缺點:優點:一輪比較只需要換一次位置;
缺點:效率慢,不穩定