一.选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是每次从未排序部分选择最小(或最大)的元素,并将其放到已排序部分的末尾。以下是用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, 25, 12, 22, 11};
        System.out.println("Unsorted array:");
        printArray(array);

        selectionSort(array);

        System.out.println("Sorted array:");
        printArray(array);
    }

    private static void printArray(int[] array) {
        for (int value : array) {
            System.out.print(value + " ");
        }
        System.out.println();
    }
}

三.详细讲解

1. 初始化:

  • n是数组的长度。

2. 外层循环:

  • 遍历数组的每个元素,i表示当前已排序部分的末尾。
  • 假设当前元素array[i]是未排序部分的最小值,初始化minIndex为i。

3. 内层循环:

  • 从i+1开始遍历未排序部分,寻找最小值。
  • 如果找到比当前最小值array[minIndex]更小的元素,则更新minIndex。

4. 交换元素:

  • 将找到的最小值array[minIndex]与未排序部分的第一个元素array[i]交换。
  • 使用一个临时变量temp来交换两个元素的位置。

5. 打印数组:

  • printArray方法用于打印数组的内容。

总结

选择排序的时间复杂度为O(n²),因为在最坏情况下需要进行n²次比较。选择排序的优点是它的实现简单,并且在某些情况下(如内存写入次数较少时)可能比其他O(n²)排序算法更有效。然而,它的效率不如更复杂的排序算法(如快速排序、归并排序)高。选择排序适合用于小规模数据集或对稳定性要求不高的场合。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐