public class SortAlgorithms {
// 交换数组中的两个元素
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 直接插入排序
public static void insertionSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j - 1]) {
swap(arr, j, j - 1);
}
}
}
}
// 冒泡排序
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]) {
swap(arr, j, j + 1);
}
}
}
}
// 选择排序
public static void selectionSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
swap(arr, i, minIndex);
}
}
// 快速排序
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
// 获取分区后的枢纽位置
int pivotIndex = partition(arr, low, high);
// 分别对枢纽左右两边进行递归排序
quickSort(arr, low, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, high);
}
}
private static int partition(int[] arr, int low, int high) {
// 选择一个枢纽元素,这里选择最高位作为枢纽
int pivot = arr[high];
int i = (low - 1);
// 遍历数组,将小于枢纽的元素放到左边,大于枢纽的元素放到右边
for (int j = low; j < high; j++) {
if (arr[j] < pivot) {
i++;
// 交换 arr[i] 和 arr[j]
swap(arr, i, j);
}
}
// 最后将枢纽元素放到正确的位置
swap(arr, i + 1, high);
return i + 1;
}
// 归并排序
public static void mergeSort(int[] arr) {
int mid = arr.length / 2;
if (arr.length >= 2) {
// 分割数组
int[] leftHalf = Arrays.copyOfRange(arr, 0, mid);
int[] rightHalf = Arrays.copyOfRange(arr, mid, arr.length);
// 递归分割
mergeSort(leftHalf);
mergeSort(rightHalf);
// 合并数组
评论已关闭