Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java排序


Java 提供了多种排序算法,用于对数组或集合中的元素进行排序。以下是一些常见的排序算法及其实现方式,包括步骤流程和示例代码。我会首先介绍经典的排序算法,然后列出一些 Java 第三方库中提供的排序方法。

经典排序算法的实现

冒泡排序(Bubble Sort)

冒泡排序是一种简单的比较排序算法,它通过反复交换相邻的元素来实现排序。

步骤流程:

  1. 从第一个元素开始,比较相邻的两个元素,如果顺序错误就交换它们。
  2. 继续比较并交换,直到没有任何交换发生,此时数组已排序完成。

示例代码:

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;
            }
        }
    }
}

插入排序(Insertion Sort)

插入排序是一种稳定的排序算法,它将数组分为已排序和未排序两部分,逐步将未排序元素插入到已排序部分。

步骤流程:

  1. 从第二个元素开始,将其与前面已排序的元素逐个比较,找到合适的位置插入。
  2. 重复上述步骤,直到所有元素都被插入到已排序部分。

示例代码:

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;
    }
}

选择排序(Selection Sort)

选择排序是一种简单的不稳定排序算法,它将数组分为已排序和未排序两部分,每次从未排序部分选择最小(或最大)的元素放到已排序部分的末尾。

步骤流程:

  1. 在未排序部分找到最小(或最大)的元素。
  2. 将找到的元素与未排序部分的第一个元素交换位置,将该元素加入到已排序部分。
  3. 重复上述步骤,直到所有元素都被加入到已排序部分。

示例代码:

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;
    }
}

快速排序(Quick Sort)

快速排序是一种高效的分治排序算法,它通过选择一个基准元素,将数组分成比基准小和比基准大的两部分,然后递归地对这两部分进行排序。

步骤流程:

  1. 选择一个基准元素(通常为数组中的第一个或最后一个元素)。
  2. 将数组分成两部分,比基准小的元素和比基准大的元素。
  3. 对这两部分分别递归地应用快速排序。
  4. 将排序后的两部分合并。

示例代码:

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 的第三方库中,有许多已经实现好的排序方法,可以直接使用。

Arrays 类

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

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);
}

这些只是排序算法的一小部分,还有其他许多排序算法和库可供选择,具体使用哪个取决于你的需求和性能要求。无论选择哪种方法,理解排序算法的工作原理是非常重要的。

sort()方法从Java8开始,List接口添加了一个默认方法`sort()`,它允许我们通过传递自定义比较器来对列表进行排序。示例代码: ...
示例代码:###依赖坐标:无###使用Java8+的StreamAPIJava8引入的StreamAPI也提供了一种便捷的排序方法。示例代码 ...
sort()`方法是Java标准库提供的数组排序方法,它可以对数组中的元素进行升序排序。parallelSort()`方法是Java8引入的 ...
在 Elasticsearch 中,默认排序是按照相关性的评分(_score)进行降序排序,也可以按照字段的值排序、多级排序、多值字段排序、 ...
###冒泡排序(BubbleSort)冒泡排序是一种简单的比较排序算法,它多次迭代列表,每次将相邻的元素进行比较并交换,直到整个列表有序。如 ...