Java實現氣泡排序和插入排序演算法

一年都在冬眠發表於2024-08-20

氣泡排序

演算法步驟

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)
穩定性 穩定 穩定
適用情況 小規模資料或基本有序的資料 小規模資料或部分有序的資料
  • 插入排序是從正向有序的,而氣泡排序是從逆向有序,氣泡排序是每次最後的一個值都為最大
  • 插入排序是將無序的元素插入有序的元素序列中,插入後仍然有序;氣泡排序是比較相鄰的元素,直到序列變成有序為止

相關文章