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

点赞收藏,富婆包养✋✋

相关推荐
瑞雪兆丰年兮1 分钟前
[从0开始学Java|第十三天]面向对象进阶(static&继承)
java·开发语言
小楼v3 分钟前
如何实现AI生成应用部署功能
java·后端·ai·部署
望未来无悔5 分钟前
系统学习算法 专题十九 优先级队列(堆)
java·算法
啊阿狸不会拉杆6 分钟前
《机器学习导论》第3章 -贝叶斯决策理论
人工智能·python·算法·机器学习·numpy·深度优先·贝叶斯决策理论
小虾米 ~6 分钟前
JAVA引用类型
java·开发语言
阿蔹6 分钟前
力扣面试题二Python
python·算法·leetcode·职场和发展
星辰_mya7 分钟前
Elasticsearch之中
java·服务器·数据库
fengxin_rou11 分钟前
[Redis从零到精通|第三篇]:缓存更新指南
java·数据库·redis·spring·缓存
九转成圣15 分钟前
告别肉眼解析!Java 递归实现 JSON 全路径自动化探测工具
java·自动化·json
_运维那些事儿15 分钟前
skywalking链路追踪
java·运维·ci/cd·软件构建·skywalking·devops