选择排序是一种简单直观的排序算法。它的工作原理是不断地选择未排序部分中最小(或最大)的元素,将其放到已排序部分的末尾。下面是用Java实现选择排序的代码,并附有详细的注释。
public class SelectionSort { // 主方法,用于测试选择排序 public static void main(String[] args) { int[] array = {64, 25, 12, 22, 11}; // 初始化一个待排序的数组 System.out.println("排序前的数组:"); printArray(array); // 打印排序前的数组 selectionSort(array); // 调用选择排序方法进行排序 System.out.println("排序后的数组:"); printArray(array); // 打印排序后的数组 } // 选择排序算法的实现 public static void selectionSort(int[] array) { int n = array.length; // 获取数组的长度 // 外层循环:遍历数组中的每一个元素 for (int i = 0; i < n - 1; i++) { int minIndex = i; // 初始化最小值的索引为当前索引 // 内层循环:在剩余未排序部分中找到最小元素 for (int j = i + 1; j < n; j++) { if (array[j] < array[minIndex]) { // 如果找到比当前最小值更小的元素 minIndex = j; // 更新最小值的索引 } } // 交换找到的最小元素与当前位置的元素 int temp = array[minIndex]; array[minIndex] = array[i]; array[i] = temp; // 打印每一轮排序后的数组状态 System.out.println("第 " + (i + 1) + " 轮排序后的数组:"); printArray(array); } } // 打印数组的方法 public static void printArray(int[] array) { for (int i : array) { // 遍历数组中的每一个元素 System.out.print(i + " "); // 打印元素 } System.out.println(); // 换行 } }
代码说明:
类和主方法:
SelectionSort 类包含主方法 main,用于运行程序。
在 main 方法中,定义了一个待排序的整数数组,并打印排序前和排序后的数组。
选择排序方法:
selectionSort 方法是选择排序算法的核心实现。
它接收一个整数数组作为参数,并对其进行排序。
外层循环从头到尾遍历数组,假设当前索引 i 位置的元素是最小值。
内层循环从 i+1 位置开始查找剩余未排序部分中的最小值。
找到最小值后,交换它与当前位置 i 的元素。
打印数组的方法:
printArray 方法用于打印数组中的所有元素。
在每一轮排序后调用 printArray 方法,打印当前数组的状态,便于观察排序过程。
选择排序的时间复杂度:
- 最好情况:O(n²)
- 最坏情况:O(n²)
- 平均情况:O(n²)
选择排序的主要优点是实现简单,理解容易。但是由于其时间复杂度较高,不适合处理大规模数据。实际应用中,更常用的是更高效的排序算法,如快速排序和归并排序。
示例输出:
排序前的数组: 64 25 12 22 11 第 1 轮排序后的数组: 11 25 12 22 64 第 2 轮排序后的数组: 11 12 25 22 64 第 3 轮排序后的数组: 11 12 22 25 64 第 4 轮排序后的数组: 11 12 22 25 64 排序后的数组: 11 12 22 25 64