冒泡排序

動圖 (圖解)

在這裏插入圖片描述

package com.company;

import org.junit.Test;

import java.util.Arrays;

/**
 * 冒泡排序說明:冒泡排序分從大到小和從小到大兩種排序方式。它們的唯一區別就是兩個數交換的條件不同,
 * 從大到小排序是前面的數比後面的小的時候交換,而從小到大排序是前面的數比後面的數大的時候交換。
 *
 * 冒泡排序的原理:從第一個數開始,依次往後比較,如果前面的數比後面的數大就交換,否則不作處理。
 * 這就類似燒開水時,壺底的水泡往上冒的過程。
 *
 * 根據動圖:數組長度設爲n。外層共循環了n-1次,外層循環增加一次,對應內層循環就 減少一次。
 */
public class BubblerSortTest {

    /**
     * 冒泡排序
     * 規則:從小到大排序 大的在右邊小的在左邊;
     *
     */
    @Test
    public void smallToLargeSorlTest(){
        //定義排序的數組
        int[] arr = {2, 8, 13, 11, 6, 7,-9};
        //打印排序前的數據
        System.out.println("排序前:" + Arrays.toString(arr));

        /**
         * 第一輪:
         *      - arr.length = 7; 第一個循環arr.length-1 = 6;
         *      - arr.length-1-i = 6;應爲arr.length 爲7 - 1 =6 ;6-i(i第一輪爲0)
         *      - arr[j] = 2;
         *      - arr[j+1] = 8;
         */
        for (int i = 0; i < arr.length-1; i++) { //外層循環控制排序趟數
            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));
    }

    /**
     * 排序規則:從大到小排序 大的在左邊小的在右邊;
     * 說明:如需從大到小排列,修改if語句的大於符號即可
     */
    @Test
    public void largeToSmallSorlTest(){
        //定義排序的數組
        int[] arr = {2, 8, 13, 11, 6, 7,-9};
        //打印排序前的數據
        System.out.println("排序前:" + Arrays.toString(arr));
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-1-i; j++) {
                //修改if語句的大於符號即可
                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));
    }
}

發佈了85 篇原創文章 · 獲贊 39 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章