Java 选择排序

163 阅读3分钟

Java 中选择排序是一种简单的排序算法,其基本原理是:

  1. 将数组分为有序部分和无序部分,最初有序部分为空,后续每次将无序部分中的最小值放到有序部分的末尾。
  2. 对于一个长度为 n 的数组,需要执行 n-1 次选择操作,每次在无序部分中寻找最小的元素,并将其放到有序部分的末尾。
  3. 选择排序算法的时间复杂度为 O(n^2),空间复杂度为 O(1)。

在 Java 中,我们可以使用以下代码实现选择排序:

public static void selectionSort(int[] arr) {
    int n = arr.length; // 获取数组长度
    for (int i = 0; i < n - 1; i++) { // 外循环,需要执行 n-1 次选择操作
        int minIndex = i; // 设置最小值的索引值为 i
        for (int j = i + 1; j < n; j++) { // 内循环,在无序部分中寻找最小的元素
            if (arr[j] < arr[minIndex]) { // 如果找到了更小的元素,更新最小值的索引
                minIndex = j;
            }
        }
        if (minIndex != i) { // 如果最小值不是当前位置 i,交换两个位置上的元素
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }
}

该代码中,我们使用了两层循环来实现选择排序。外层循环需要执行 n-1 次选择操作,即在无序部分中寻找最小的元素,并将其放到有序部分的末尾。内层循环需要在每次外层循环中执行 n-i 次,其中 i 表示已经排序完成的元素个数。

在内层循环中,我们首先将最小值的索引设置为当前位置 i,然后在无序部分中寻找最小的元素,并更新最小值的索引。如果最小值不是当前位置 i,说明需要交换两个位置上的元素,使得最小值被放到有序部分的末尾。

选择排序算法具有以下几个特点:

  1. 简单易懂:选择排序算法是一种简单易懂的排序算法,在实现过程中只需要使用两层循环即可。
  2. 性能较低:选择排序算法的时间复杂度为 O(n^2),空间复杂度为 O(1),因此其性能较低,也不适合处理大规模数据。
  3. 不稳定排序:选择排序算法是一种不稳定的排序算法,不稳定性是指相等的元素在排序后的顺序与之前的顺序可能不同。
  4. 最优情况下,时间复杂度可能会达到 O(n^2),这种情况是当所有元素都逆序排列时发生。
  5. 由于选择排序算法不需要使用递归或栈来实现,因此它的空间复杂度较低,在处理大规模数据时具有一定优势。

考虑到选择排序算法的性能、稳定性以及其他方面的限制,我们在实际工作中很少使用选择排序。相对而言,更高效的快速排序、归并排序等算法更为实用。