数据结构-选择排序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. 在某些情况下,如数据已经部分有序的时候,选择排序可能会表现出较好的性能,因为它每次都会从小到大(或从大到小)选取一个元素。但是,如果数据的初始顺序和选择排序的顺序相反,那么选择排序的性能就会较差。

点赞收藏,富婆包养✋✋

相关推荐
道尔柯南2 分钟前
C++ STL 入门详解:从认识标准模板库到掌握学习方法
java·c++·学习方法
杨凯凡4 分钟前
Spring Boot 4 升级为什么卡在 Jackson 3?包名、配置与兼容迁移指南
java·spring boot 4·技术升级·jackson 3·spring framework
天天被压力5 分钟前
【A股分钟级高频数据完全手册 #01】Pro版接口体系总览与REST鉴权:42篇地图与从0接入
java·人工智能·python
IT_陈寒7 分钟前
React实战技巧总结
前端·人工智能·后端
xyouyuweizhu8 分钟前
Java InetAddress 详解:从 IP 地址表示到主机名解析
java·开发语言·python
微尘hjx30 分钟前
【Deep-OC-SORT 03】多轨迹算法Deep-OC-SORT-卡尔曼滤波预测过程
算法·yolo·目标跟踪·ultralytics·车跟踪·轨迹算法·deep-oc-sort
老师我太想进步了20262 小时前
【数据结构-3】算法美学之降复杂度
数据结构·算法
陈随易8 小时前
Postman 被曝自动往 Claude Code 和 Codex 装插件
前端·后端·程序员
机器人零零壹8 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
AI你一生一世9 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施