目录
重拾数据结构和算法。
冒泡排序
private static void bubbleSort(int[] arr) {
if (arr == null || arr.length < 0) {
return;
}
for (int end = arr.length - 1; end > 0; end--) { //边界收缩
for (int i = 0; i < end; i++) {
if (arr[i] > arr[i + 1]) {
SortUtil.swap(arr, i, i + 1);//交换位置
}
}
}
}
public static void swap(int[] arr, int x,int y) {
temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
选择排序
设置 minIndex 记录 最小元素位置 ,暂时记录 左边界: start。
循环比较 左边界 及 其右侧 所有元素,每找到比 minIndex记录值 小的,使 minIndex 记录该元素位置。
每次循环结束,交换 左边界 与 minIndex 记录元素的位置。
交换完成后,将左边界右移。 并且,使 minIndex 记录新的左边界 start
可保证,左边界 左侧,始终 从小到大 排序完成。
private static void selectionSort(int[] arr) {
for (int start = 0; start < arr.length - 1; start++) { //start:左边界,每次右移左边界,左边界的左侧有序
int minIndex = start; //此次循环 最小元素位置
for (int i = start + 1; i < arr.length; i++) { //找出 最小元素 位置,并记录
if (arr[i] < arr[minIndex]) {
minIndex = i;
}
}
SortUtil.swap(arr, start, minIndex); // 交换 左边界 与 最小元素 位置
}
}
插入排序
从第二个位置开始,选择待插入的数 x = arr [ i ]
尝试将 x = arr [ i ] 插入 位置 i 的左侧。
每发现比 x 大,则交换两者位置。直到遇见比 x 小的。保持橙色部分排序完成。
交换完成后,继续从橙色区域右侧外,选择待插入数
private static void insertionSort(int[] arr) {
for (int i = 1; i < arr.length; i++) { //从第二个数开始
for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) { // 若当前位置,比后一个大
SortUtil.swap(arr, j, j+1); // 交互两者位置
}
}
}