氣泡排序
演算法步驟
1、比較相鄰的元素,如果第一個比第二個大,就交換它們兩個;
2、對每一對相鄰元素作同樣的比價,從開始第一對到結尾的最後一對,這樣在最後的元素就是最大的數;
3、針對所有的元素重複以上的步驟,除了陣列最後已經排好序的陣列;
4、重複步驟1~3,直到排序完成。
程式碼實現
package com.example.helloworld;
import java.util.Arrays;
public class BubbleSort {
public static void bubblesort(int[] arr){
int len = arr.length;
for (int i = 0; i < len-1; i++){
boolean flag = true;
for (int j = 0; j < len-i-1; j++){
if (arr[j] > arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = false;
}
}
System.out.println("第" + (i + 1) + "輪排序結果:" + Arrays.toString(arr));
if (flag){
break;
}
}
}
public static void main(String args[]){
int[] array_1 = {2,5,6,7,8,1,9};
int[] array_2 = {23,12,67,45,99,17,13};
System.out.println("array_1氣泡排序結果為:");
BubbleSort.bubblesort(array_1);
System.out.println("array_2氣泡排序結果為:");
BubbleSort.bubblesort(array_2);
}
}
array_1氣泡排序結果為:
第1輪排序結果:[2, 5, 6, 7, 1, 8, 9]
第2輪排序結果:[2, 5, 6, 1, 7, 8, 9]
第3輪排序結果:[2, 5, 1, 6, 7, 8, 9]
第4輪排序結果:[2, 1, 5, 6, 7, 8, 9]
第5輪排序結果:[1, 2, 5, 6, 7, 8, 9]
第6輪排序結果:[1, 2, 5, 6, 7, 8, 9]
array_2氣泡排序結果為:
第1輪排序結果:[12, 23, 45, 67, 17, 13, 99]
第2輪排序結果:[12, 23, 45, 17, 13, 67, 99]
第3輪排序結果:[12, 23, 17, 13, 45, 67, 99]
第4輪排序結果:[12, 17, 13, 23, 45, 67, 99]
第5輪排序結果:[12, 13, 17, 23, 45, 67, 99]
第6輪排序結果:[12, 13, 17, 23, 45, 67, 99]
插入排序
演算法步驟
1、首先從第一個元素開始,該元素被認為是有序的;
2、取出下一個元素,在已經排序的元素序列中從後往前進行掃描;
3、如果該已排好序的元素大於新元素,則將該元素移到下一位置;
4、重複步驟3一直往前進行掃描比較,直到找到已排序的元素小於或者等於新元素的位置;
5、將新元素插入到該位置後;
6、重複步驟2~5。
程式碼實現
package com.example.helloworld;
import java.util.Arrays;
public class InsertSort {
public static void insertsort(int[] arr){
for (int i = 1; i < arr.length; i++){
int val = arr[i], j = i;
while (j > 0 && val < arr[j - 1]){
arr[j] = arr[j - 1];
j--;
}
arr[j] = val;
System.out.println("第" + i + "輪排序結果:" + Arrays.toString(arr));
}
}
public static void main(String args[]){
int[] arr_1 = {17,13,5,2,6,9};
System.out.println("array_1插入排序結果為:");
InsertSort.insertsort(arr_1);
}
}
array_1插入排序結果為:
第1輪排序結果:[13, 17, 5, 2, 6, 9]
第2輪排序結果:[5, 13, 17, 2, 6, 9]
第3輪排序結果:[2, 5, 13, 17, 6, 9]
第4輪排序結果:[2, 5, 6, 13, 17, 9]
第5輪排序結果:[2, 5, 6, 9, 13, 17]
演算法比較
氣泡排序 | 插入排序 | |
---|---|---|
平均時間複雜度 | O(n^2) | O(n^2) |
最好時間複雜度 | O(n) | O(n) |
最壞時間複雜度 | O(n^2) | O(n^2) |
空間複雜度 | O(1) | O(1) |
穩定性 | 穩定 | 穩定 |
適用情況 | 小規模資料或基本有序的資料 | 小規模資料或部分有序的資料 |
- 插入排序是從正向有序的,而氣泡排序是從逆向有序,氣泡排序是每次最後的一個值都為最大
- 插入排序是將無序的元素插入有序的元素序列中,插入後仍然有序;氣泡排序是比較相鄰的元素,直到序列變成有序為止