《算法》- 第 2 章 排序
public class BubbleSort {
public void sort(Comparable[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
// 交换标志
boolean swap = false;
// arr.length - 1 - i 号元素已排好序
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j].compareTo(arr[j + 1]) > 0) {
Comparable temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swap = true;
}
}
if (!swap) {
// 如果没有发生交换,代表已经排好序,直接返回
return;
}
}
}
}
public class SelectionSort {
public void sort(Comparable[] arr) {
for (int i = 0; i < arr.length; i++) {
// 保留每一次遍历时的最小值对应的索引
int minIndex = i;
// 遍历得到当前未排序中的最小值所在索引
for (int j = i + 1; j < arr.length; j++) {
if (arr[minIndex].compareTo(arr[j]) > 0) {
minIndex = j;
}
}
// 将最小值与当前值交换位置
Comparable temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}