[TOC]
## 選擇排序
```java
/**
* 選擇排序
* 第一次將最小的數值放到第一個位置 第一個位置 + 1
* 循環將最小的數值放到(第一個位置 + 1)的位置上
*
* @param arr int[]
* @return int[]
*/
private static int[] selectSort(int[] arr) {
for (int start = 0; start < arr.length; start++) {
int minIndex = start;
for (int i = start + 1; i <= arr.length - 1; i++) {
if (arr[i] < arr[minIndex]) {
minIndex = i;
}
}
int temp = arr[minIndex];
arr[minIndex] = arr[start];
arr[start] = temp;
}
return arr;
}
```
## 冒泡排序
```java
/**
* 冒泡排序
* @param arr int[]
* @return int[]
*/
private static int[] 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 + 1] < arr[j]) {
arr[j + 1] ^= arr[j];
arr[j] ^= arr[j + 1];
arr[j + 1] ^= arr[j];
}
}
}
return arr;
}
```
## 插入排序
~~~java
/**
* 插入排序
* @param arr int[]
*/
public static void insertSort(@NotNull int[] arr) {
for (int i = 1; i < arr.length; i++) {
// 定義待插入的數
int insertVal = arr[i];
// arr[1] 前面的數的下標
int insertIndex = i - 1;
// 給insertVal找到插入的位置
// insertVal < arr[insertIndex] 待插入的數還沒有找到適當的位置
// 需要將arr[insertIndex] 后移
while (insertIndex >= 0 && insertVal < arr[insertIndex]) {
arr[insertIndex + 1] = arr[insertIndex];
insertIndex--;
}
// 當退出while循環時,說明插入的位置找到,insertIndex + 1
arr[insertIndex + 1] = insertVal;
System.out.println("第" + i + "輪操作后");
System.out.println(Arrays.toString(arr));
}
}
~~~