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

点赞收藏,富婆包养✋✋

相关推荐
YuTaoShao25 分钟前
【LeetCode 热题 100】56. 合并区间——排序+遍历
java·算法·leetcode·职场和发展
程序员张328 分钟前
SpringBoot计时一次请求耗时
java·spring boot·后端
llwszx3 小时前
深入理解Java锁原理(一):偏向锁的设计原理与性能优化
java·spring··偏向锁
云泽野4 小时前
【Java|集合类】list遍历的6种方式
java·python·list
二进制person5 小时前
Java SE--方法的使用
java·开发语言·算法
OneQ6665 小时前
C++讲解---创建日期类
开发语言·c++·算法
JoJo_Way5 小时前
LeetCode三数之和-js题解
javascript·算法·leetcode
小阳拱白菜5 小时前
java异常学习
java
.30-06Springfield6 小时前
人工智能概念之七:集成学习思想(Bagging、Boosting、Stacking)
人工智能·算法·机器学习·集成学习
程序员岳焱6 小时前
Java 与 MySQL 性能优化:Java 实现百万数据分批次插入的最佳实践
后端·mysql·性能优化