Java 选择排序详解:核心原理、完整代码与步骤演示
什么是选择排序?
选择排序是一种直观的比较型算法,反复从无序部分选出最小元素,交换到有序部分末尾。虽非大数据最优,但其简单性使其成为教学和小数组排序的理想选择。
算法工作原理
- 从数组开头开始。
- 在无序部分找到最小元素。
- 将其与当前位置元素交换。
- 有序/无序边界右移一位。
- 重复直到整个数组有序。
Java 实现
下面是演示选择排序的简洁 Java 程序,打印排序前后数组及每趟中间步骤。
package com.guru99;
public class SelectionSortAlgo {
public static void main(String[] args) {
int[] myArray = {860, 8, 200, 9};
System.out.println("------选择排序前------");
printArray(myArray);
selection(myArray);
System.out.println("------选择排序后------");
printArray(myArray);
}
public static void selection(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
System.out.println("第 " + (i + 1) + " 趟排序");
int index = i;
for (int j = i + 1; j < array.length; j++) {
System.out.println("比较 " + array[index] + " 和 " + array[j]);
if (array[j] < array[index]) {
System.out.println(array[index] + " 大于 " + array[j]);
index = j;
}
}
int smallerNumber = array[index];
array[index] = array[i];
array[i] = smallerNumber;
System.out.println("交换元素: 交换后数组");
printArray(array);
}
}
private static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
}
}
运行示例输出
------选择排序前------
860 8 200 9
第 1 趟排序
比较 860 和 8
860 大于 8
比较 8 和 200
比较 8 和 9
交换元素: 交换后数组
8 860 200 9
第 2 趟排序
比较 860 和 200
860 大于 200
比较 200 和 9
200 大于 9
交换元素: 交换后数组
8 9 200 860
第 3 趟排序
比较 200 和 860
交换元素: 交换后数组
8 9 200 860
------选择排序后------
8 9 200 860
性能特性
选择排序无论输入如何,比较次数固定为 O(n²),额外内存 O(1)。其确定性行为适合内存受限环境。
优化提示
- 可改为双向选择排序(每趟同时选最小和最大),减少趟数约一半。
- 对于小数组(< 50),选择排序因低开销常快于复杂算法。
java
- 精通 Java 数组:声明、初始化与操作全攻略
- Java Hello World 入门教程:从 JDK 安装到编译运行第一个程序
- Java 封装完全指南:数据隐藏、访问器/修改器、实战案例与核心优势
- Java 变量与数据类型完全指南(含示例)
- Java 类与对象:核心概念与实战示例
- Java String length() 方法:获取字符串长度(示例)
- Java String.charAt() 详解:语法、返回类型、异常与实战示例
- Java String.contains() 方法:检查子字符串是否存在(实战示例)
- 精通 Java String.endsWith():检查字符串后缀(示例)
- Java BufferedReader 读取文件:实战指南与示例
- Java 冒泡排序详解:核心原理、完整代码与步骤演示
- Java 插入排序算法详解:核心原理、完整代码与步骤演示