動圖 (圖解)
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));
}
}