算法:用Java實現冒泡排序(BubbleSort)、插入排序(InsertSort)、選擇排序(SelectSort)

接下來我準備發表一系列關於排序的算法,本文我準備用Java實現冒泡排序、插入排序、選擇排序。具體的排序算法過程已經在註釋裏面了,大家可看註釋,也可複製代碼到IDE裏面,用DEBUG模式研究算法的過程:

1、冒泡排序(BubbleSort):

import java.util.Arrays;

/**
 * @author LiYang
 * @ClassName BubbleSort
 * @Description 冒泡排序算法
 * @date 2019/11/4 11:14
 */
public class BubbleSort {

    /**
     * 冒泡排序算法(BubbleSort):
     * 每次排序,從左到右兩兩依次比較,
     * 保證將較大的數放在兩兩的右邊,
     * 一次遍歷,就將遍歷區最大數放到了最右邊。
     * 然後再兩兩比較上一次最大數的左邊區域
     * @param arr 待排序數組
     */
    public static void bubbleSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - i - 1; j++) {
                //一次交換,就是大數往右冒一下泡
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

    /**
     * 運行冒泡排序算法
     * @param args
     */
    public static void main(String[] args) {
        //待排序數組
        int[] arr = {3,6,4,2,5,1,9,8,7,0};
        
        //打印待排序數組
        System.out.println("冒泡排序前:" + Arrays.toString(arr));
        
        //進行冒泡排序
        bubbleSort(arr);
        
        //打印冒泡排序後的數組
        System.out.println("冒泡排序後:" +Arrays.toString(arr));
    }
    
}

運行 BubbleSort 類的main方法,冒泡排序算法測試通過:

冒泡排序前:[3, 6, 4, 2, 5, 1, 9, 8, 7, 0]
冒泡排序後:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

2、插入排序(InsertSort):

import java.util.Arrays;

/**
 * @author LiYang
 * @ClassName InsertSort
 * @Description 插入排序算法
 * @date 2019/11/4 11:20
 */
public class InsertSort {

    /**
     * 插入排序算法(InsertSort):
     * 將排序數組分爲兩個區域:左邊亂序區和右邊有序區
     * 逐漸將左邊亂序區的元素,依次與右邊有序區比較
     * 如果遇到比自己小的,就繼續往右前進,直到插入到
     * 剛好比自己大的元素的左邊
     * @param arr 待排序數組
     */
    public static void insertSort(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = arr.length - i - 1; j < arr.length - 1; j++){
                //如果還沒遇到有序區剛好比自己大的元素,則交換前進
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    
                //遇到了剛好比自己大的元素,表示已插入正確的位置,停下
                } else {
                    break;
                }
            }
        }
    }

    /**
     * 運行插入排序算法
     * @param args
     */
    public static void main(String[] args) {
        //待排序數組
        int[] arr = {3,6,4,2,5,1,9,8,7,0};

        //打印待排序數組
        System.out.println("插入排序前:" + Arrays.toString(arr));

        //進行插入排序
        insertSort(arr);

        //打印插入排序後的數組
        System.out.println("插入排序後:" +Arrays.toString(arr));
    }
    
}

運行 InsertSort 類的main方法,插入排序算法測試通過:

插入排序前:[3, 6, 4, 2, 5, 1, 9, 8, 7, 0]
插入排序後:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

3、選擇排序(SelectSort):

import java.util.Arrays;

/**
 * @author LiYang
 * @ClassName SelectSort
 * @Description 選擇排序算法
 * @date 2019/11/4 11:26
 */
public class SelectSort {

    /**
     * 選擇排序算法(SelectSort):
     * 依次將從左到右的元素進行選擇,如果後面的元素
     * 有比自己小的,則選擇與之交換,然後再往後比,
     * 又遇到更小的,又與之交換。遍歷完一遍後,左邊
     * 的元素就是最小的了,這個的位置就定了,然後右邊
     * 的下一個又繼續往右邊比,又選出第二小的,以此類推
     * @param arr 待排序數組
     */
    public static void selectSort(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                //注意這裏的下標,小的元素都是與arr[i]交換
                //最後arr[i]就是選出來的最小的元素
                if (arr[j] < arr[i]) {
                    int temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                }
            }
        }
    }

    /**
     * 運行選擇排序算法
     * @param args
     */
    public static void main(String[] args) {
        //待排序數組
        int[] arr = {3,6,4,2,5,1,9,8,7,0};

        //打印待排序數組
        System.out.println("選擇排序前:" + Arrays.toString(arr));

        //進行選擇排序
        selectSort(arr);

        //打印選擇排序後的數組
        System.out.println("選擇排序後:" +Arrays.toString(arr));
    }
    
}

運行 SelectSort 類的main方法,選擇排序算法測試通過:

選擇排序前:[3, 6, 4, 2, 5, 1, 9, 8, 7, 0]
選擇排序後:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章