接下來我準備發表一系列關於排序的算法,本文我準備用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]