可以看这个网站的动图理解
【数据结构】八大排序(超详解+附动图+源码)_数据结构排序-CSDN博客
一 基本思想
第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始(末尾)位置,
然后选出次小(或次大)的一个元素,存放在最大(最小)元素的下一个位置,
重复这样的步骤直到全部待排序的数据元素排完 。
public class Main {
// 主方法,程序的入口点
public static void main(String[] args) {
// 初始化一个整数数组,包含一些随机的整数
int array[] = {1, 66, 2, 645, 223, 531, 352, -1, -432};
// 调用Print方法打印原始数组
Print(array);
// 调用sort方法对数组进行排序
sort(array);
// 再次调用Print方法打印排序后的数组
Print(array);
}
// Print方法,用于打印数组中的所有元素
public static void Print(int arr[]){
// 遍历数组,打印每个元素
for(int i : arr){
System.out.printf("%d\t",i);
}
// 在打印完数组后换行
System.out.println();
}
// sort方法,用于对传入的整数数组进行选择排序
public static void sort(int nums[]){
// 外层循环,i表示当前需要确定位置的元素索引
for(int i = 0 ; i < nums.length; i++){
// 初始化最小元素的索引和值,假设当前索引i的元素是最小的
int minIndex = i;
int minNum = nums[i];
// 内层循环,从i+1开始,因为i位置的元素已经假设为最小值
for(int j = i + 1; j < nums.length; j++){
// 如果当前比较的元素比已知的最小值还小,更新最小值和最小值的索引
if(nums[j] < minNum){
minNum = nums[j];
minIndex = j;
}
}
// 如果最小元素的索引不是当前索引i,说明找到了一个比当前位置元素还小的元素
// 需要将这个最小元素放到当前位置i
if(i != minIndex){
// 交换当前位置i的元素和最小元素的位置
int temp = nums[i];
nums[i] = nums[minIndex];
nums[minIndex] = temp;
}
}
}
}
二 实现代码
三 总结
直接选择排序的特性总结:
- 直接选择排序思考非常好理解,但是效率不是很好(不论数组是否有序都会执行原步骤)。实际中很少使用
- 时间复杂度:O(N^2)
- 空间复杂度:O(1)
- 稳定性:不稳定
1371

被折叠的 条评论
为什么被折叠?



