Java 提供了多种排序算法,用于对数组或集合中的元素进行排序。以下是一些常见的排序算法及其实现方式,包括步骤流程和示例代码。我会首先介绍经典的排序算法,然后列出一些 Java 第三方库中提供的排序方法。
冒泡排序是一种简单的比较排序算法,它通过反复交换相邻的元素来实现排序。
步骤流程:
示例代码:
public void bubbleSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// Swap arr[j] and arr[j+1]
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
插入排序是一种稳定的排序算法,它将数组分为已排序和未排序两部分,逐步将未排序元素插入到已排序部分。
步骤流程:
示例代码:
public void insertionSort(int[] arr) {
int n = arr.length;
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
选择排序是一种简单的不稳定排序算法,它将数组分为已排序和未排序两部分,每次从未排序部分选择最小(或最大)的元素放到已排序部分的末尾。
步骤流程:
示例代码:
public void selectionSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// Swap arr[i] and arr[minIndex]
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
快速排序是一种高效的分治排序算法,它通过选择一个基准元素,将数组分成比基准小和比基准大的两部分,然后递归地对这两部分进行排序。
步骤流程:
示例代码:
public 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 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++;
// Swap arr[i] and arr[j]
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// Swap arr[i+1] and arr[high]
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return i + 1;
}
在 Java 的第三方库中,有许多已经实现好的排序方法,可以直接使用。
Java 标准库的 java.util.Arrays
类提供了各种排序方法,包括快速排序、归并排序和并行排序等。
Maven 依赖坐标:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
示例代码:
import org.apache.commons.lang3.ArrayUtils;
public void arraySortExample(int[] arr) {
ArrayUtils.sort(arr);
}
Apache Commons Lang 库也提供了各种排序方法。
Maven 依赖坐标:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
示例代码:
import org.apache.commons.lang3.ArrayUtils;
public void commonsLangSortExample(int[] arr) {
ArrayUtils.sort(arr);
}
这些只是排序算法的一小部分,还有其他许多排序算法和库可供选择,具体使用哪个取决于你的需求和性能要求。无论选择哪种方法,理解排序算法的工作原理是非常重要的。