简介
前一章我们说了 Java 冒泡排序算法 ,这章我们来学习一下选择排序,老规矩,我们带着问题去学习,这样能更快的熟悉和掌握,学习如下:
1、选择排序的定义
2、选择排序的思路
3、代码实现
1.选择排序的定义
选择排序算法:基本思路是为每一个位置选择当前最小的元素。
2、选择排序的思路
- 将第一个值看成最小值
- 然后和后续值进行比较,找出最小值和下标,交换本次遍历的起始值和最小值
- 直至完成第(n-1)个位置的元素选择
- 说明:每次遍历的时候,将前面找出的最小值,看成一个有序的列表,后面的看成无序的列表,然后每次遍历无序列表找出最小值。
特别注意:原序列中的两个相同元素,比如元素为“5”,排序之后的前后相对顺序会发生了改变。
因此,我们说选择排序不是稳定的排序算法,它在计算过程中会破坏稳定性。
3.代码实现
package com.gongchao.boss;
/**
- description: 选择排序
- auth: zengtao
- time: 2020-12-08 12:25
**/
public class Main {
public static void main(String[] args) {
int arr[] = {9, 5, 2, 7, 4};
// 选择排序
sortSelect(arr);
}
private static void sortSelect(int[] arr) {
for (int i = 0; i < arr.length; i++) {
// 默认第一个是最小的。
int min = arr[i];
// 记录最小的下标
int index = i;
// 通过与后面的数据进行比较得出,最小值和下标
for (int j = i + 1; j < arr.length; j++) {
if (min > arr[j]) {
min = arr[j];
index = j;
}
}
//然后将最小值与本次循环的,开始值交换
int temp = arr[i];
arr[i] = min;
arr[index] = temp;
// 说明:将i前面的数据看成一个排好的队列,i后面的看成一个无序队列。每次只需要找无需的最小值,做替换
// 打印交换后的顺序
systemArr(arr);
}
}
private static void systemArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println("");
}
}
运行结果
结果 vs 选择排序思路
1⃣️ 找出最小值
2 5 9 7 4 正确
2⃣️ 不停的遍历,直至完成第(n-1)个的元素选择
2 4 9 7 5
2 4 5 7 9
2 4 5 7 9
3⃣️ 最终结果
2 4 5 7 9
经过验证,每一个步骤都是按照思路来的,而且都是正确的,so,选择排序总结完毕!
欢迎观看,Thanks !