数据结构-选择排序Java实现

目录

一、引言

选择排序是一种基本的比较排序算法,其思想非常直观:它从未排序的元素中选择最小的元素,然后将其放到已排序的部分的末尾。这个过程一直重复,直到整个数组都被排序。选择排序的时间复杂度是O(n^2),因此不适用于大型数据集,但它非常容易理解和实现。

二、算法步骤

选择排序的基本步骤如下:

  1. 在未排序的部分中,找到最小的元素。
  2. 将找到的最小元素与未排序部分的第一个元素交换位置。
  3. 增加已排序部分的大小,减小未排序部分的大小。
  4. 重复上述步骤,直到整个数组都排好序。

三、原理演示

假设我们有以下整数数组:

64, 34, 25, 12, 22, 11, 90

  • 第一轮:
    在第一轮中,算法将从整个数组中找到最小的元素,并将其放在数组的第一个位置。
    初始状态:未排序部分 [64, 34, 25, 12, 22, 11, 90],已排序部分 []。
    找到未排序部分中的最小元素 11,将其与未排序部分的第一个元素 64 交换,数组变为:已排序部分 [11],未排序部分 [34, 25, 12, 22, 64, 90]。
  • 第二轮:
    在第二轮中,算法将从未排序部分中找到最小的元素,并将其放在已排序部分的末尾。
    未排序部分 [34, 25, 12, 22, 64, 90],已排序部分 [11]。
    找到未排序部分中的最小元素 12,将其与未排序部分的第一个元素 34 交换,数组变为:已排序部分 [11, 12],未排序部分 [25, 34, 22, 64, 90]。
    (继续重复这个过程,每轮选择未排序部分中的最小元素并将其放在已排序部分的末尾)
  • 第三轮:
    未排序部分 [25, 34, 22, 64, 90],已排序部分 [11, 12]。
    找到未排序部分中的最小元素 22,将其与未排序部分的第一个元素 25 交换,数组变为:已排序部分 [11, 12, 22],未排序部分 [34, 25, 64, 90]。

以此类推,直到整个数组都已排序。

选择排序的关键思想是不断选择未排序部分中的最小元素,并将其放在已排序部分的末尾。这一过程反复进行,直到整个数组都被排序。虽然选择排序不是最高效的排序算法,但它是一种简单而直观的算法,适用于小型数据集或用于教育目的。希望这个文字说明能够帮助您更好地理解选择排序的实现过程。

四、代码实战

下面是使用Java编写的选择排序算法示例:

java 复制代码
public class SelectionSort {
    public static void main(String[] args) {
        int[] arr = {64, 34, 25, 12, 22, 11, 90};

        System.out.println("原始数组:");
        printArray(arr);

        selectionSort(arr);

        System.out.println("排序后的数组:");
        printArray(arr);
    }

    // 选择排序实现
    public static 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;
                }
            }

            // 交换arr[i]和arr[minIndex]
            int temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }

    // 辅助方法,用于打印数组
    public static void printArray(int[] arr) {
        for (int value : arr) {
            System.out.print(value + " ");
        }
        System.out.println();
    }
}

上述代码演示了选择排序的实现。它首先定义了一个包含整数数组的示例,然后调用 selectionSort 方法来对数组进行排序。selectionSort 方法通过找到未排序部分的最小元素,并与未排序部分的第一个元素交换位置来实现选择排序。

五、结论

我们一起来总结一下:

  1. 选择排序的时间复杂度是O(n^2),其中n是待排序元素的个数。这是因为在每次迭代中,都需要在剩余的未排序元素中找到最小(或最大)元素,然后将其与当前位置的元素交换。
  2. 选择排序的空间复杂度是O(1),因为只需要额外的空间存储临时变量,这个空间并不随输入数据量的增加而增加。
    选择排序是稳定的排序算法,即相等的元素的相对位置在排序后不会改变。
  3. 选择排序在处理大数据集时效率较低,因为其时间复杂度较高。在这种情况下,可能会考虑使用其他更高效的排序算法,如快速排序、归并排序、堆排序等。
  4. 选择排序适合小数据集的排序,因为它的实现简单且直观。如果数据集的大小很大,那么可能需要考虑使用更高效的算法来获得更好的性能。
  5. 在某些情况下,如数据已经部分有序的时候,选择排序可能会表现出较好的性能,因为它每次都会从小到大(或从大到小)选取一个元素。但是,如果数据的初始顺序和选择排序的顺序相反,那么选择排序的性能就会较差。

点赞收藏,富婆包养✋✋

相关推荐
Kaltistss3 分钟前
98.验证二叉搜索树
算法·leetcode·职场和发展
都叫我大帅哥4 分钟前
🌊 Redis Stream深度探险:从秒杀系统到面试通关
java·redis
都叫我大帅哥5 分钟前
Redis持久化全解析:从健忘症患者到记忆大师的逆袭
java·redis
知己如祭7 分钟前
图论基础(DFS、BFS、拓扑排序)
算法
mit6.82416 分钟前
[Cyclone] 哈希算法 | SIMD优化哈希计算 | 大数运算 (Int类)
算法·哈希算法
c++bug19 分钟前
动态规划VS记忆化搜索(2)
算法·动态规划
哪 吒21 分钟前
2025B卷 - 华为OD机试七日集训第5期 - 按算法分类,由易到难,循序渐进,玩转OD(Python/JS/C/C++)
python·算法·华为od·华为od机试·2025b卷
程序猿阿越24 分钟前
Kafka源码(一)Controller选举与创建Topic
java·后端·源码
程序员爱钓鱼24 分钟前
Go语言项目工程化 — 常见开发工具与 CI/CD 支持
开发语言·后端·golang·gin