• 数据结构-选择排序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编写的选择排序算法示例:

    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();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

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

    五、结论

    我们一起来总结一下:

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

    点赞收藏,富婆包养✋✋

  • 相关阅读:
    VisualSFM的配置与使用 & MeshLab的网格生成与纹理添加
    驱动开发 linux内核GPIO子系统、及其新版API的概念和使用,linux内核定时器
    python基础语法(一)
    并发编程的核心问题
    剑指offer专项突击版第28天
    品牌发展,为什么要做好低价管控
    git init报错:‘git‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
    Map集合的常用功能、遍历方式、集合特点与TreeMap的特点和排序全文详解
    马来西亚市场最全开发攻略
    电商爬虫API快速入门指南
  • 原文地址:https://blog.csdn.net/u010786653/article/details/133877141