文章目录

  • 📋选择排序概念
  • 选择排序的实现步骤如下:
  • 🔖代码示例
  • 📈总结


📋选择排序概念


  • Java选择排序(Selection Sort)是一种简单直观的排序算法,它将待排序列表分为已排序和未排序两部分,每次从未排序部分选择最小(或最大)的元素,将其放置在已排序部分的末尾,直至整个列表排序完成。
  • 选择排序的基本思想是:在每一轮遍历中,找到未排序部分的最小(或最大)元素,然后将其与未排序部分的第一个元素交换位置。

选择排序的实现步骤如下:


  1. 遍历整个列表,找到未排序部分的最小(或最大)元素。
  2. 将找到的最小(或最大)元素与未排序部分的第一个元素进行交换。
  3. 设定已排序部分的末尾指针向后移动一位,即扩大已排序部分。
  4. 重复以上步骤,每一轮遍历都将一个最小(或最大)元素放置到已排序部分的末尾,直到整个列表排序完成。

🔖代码示例


以下是Java中实现选择排序的示例代码:

public class SelectionSort {
    public static void selectionSort(int[] array) {
        int n = array.length;
        for (int i = 0; i < n - 1; i++) {
            // 找到未排序部分的最小元素的索引
            int minIndex = i;
            for (int j = i + 1; j < n; j++) {
                if (array[j] < array[minIndex]) {
                    minIndex = j;
                }
            }
            // 交换最小元素和当前位置的元素
            int temp = array[minIndex];
            array[minIndex] = array[i];
            array[i] = temp;
        }
    }

    public static void main(String[] args) {
        int[] array = {64, 34, 25, 12, 22, 11, 90};
        selectionSort(array);
        
        System.out.println("排序后的数组:");
        for (int i : array) {
            System.out.print(i + " ");
        }
    }
}

在上述代码中,我们使用两个嵌套的循环来遍历列表,并找到未排序部分的最小元素。在内层循环中,我们通过依次比较找出未排序部分的最小元素的索引,然后将其与未排序部分的第一个元素进行交换。通过迭代,最小元素不断地被放置到已排序部分的末尾,直至整个列表排序完成。输出结果将会是递增顺序的排序结果。

运行上述代码,输出结果为:

排序后的数组:
11 12 22 25 34 64 90

📈总结


  • 选择排序适合以下场景:
  1. 小规模数组:相比其他高效的排序算法(如快速排序、归并排序),选择排序在小规模数组上的性能较好。当数组元素数量较小时,选择排序可以是一个简单而有效的选择。
  2. 简单实现:选择排序是一种直观且易于理解的排序算法,实现起来相对简单。它不需要复杂的划分或合并操作,只需简单地遍历数组,并选择最小(或最大)的元素进行交换。因此,选择排序适用于一些简单实现的场景。
  3. 不关心稳定性:选择排序是一种不稳定的排序算法,即相等元素的相对顺序可能会发生改变。在某些情况下,对元素的相对顺序要求不严格或者不需要维持相对顺序时,选择排序是一个合适的选择。
  4. 减少交换次数:相比于其他排序算法,选择排序在每次遍历中只进行一次交换操作(找到最小元素后与当前位置进行交换)。这可能在某些情况下比其他算法更加高效,特别是当交换操作的成本较高时。
  • 总之,选择排序适用于小规模数组、简单实现、不关心稳定性和想要减少交换次数的场景。然而,选择排序的时间复杂度为O(n^2),因此在大规模乱序数组的情况下,它的性能不如其他高级排序算法。在实际应用中,需要根据数据规模和特点选择合适的排序算法。