关于选择排序法
上一篇:冒泡排序
记录一下关于 Java 数组中的另一个简单的算法:
选择排序法
算法原理:
假设有一个整型一维数组 a = { 3,1,6,2,5 },要对该数组中的元素进行从小到大的排序。选择排序算法核心思想
:
每一次从数组中找出最小值(外层每循环一次,找到数组中最小的元素),拿着最小的元素与当前数组最前面的元素交换位置,每次外层循环结束后去除最小的元素(也就是最左边的元素),重复进行下去…**
- 第一次参与比较的的数据:3 1 6 2 5
第一次循环后的结果:1 3 6 2 5
- 第二次参与比较的数据:3 6 2 5
第一次循环后的结果:2 6 3 5
- 第三次参与比较的数据:6 3 5
第一次循环后的结果:3 6 5
- 第四次参与比较的数据:6 5
第四次循环后的结果:5 6
至此循环结束
冒泡排序 VS 选择排序:
-
选择排序比冒泡排序的效率高;
-
比较的次数虽然与冒泡排序比较的次数一样;
-
冒泡排序存在很多次的无意义交换元素,选择排序每次交换元素总是有意义的(交换次数变少了)。
实现代码:
/**
* by YeRun
*/
public class SelectSort {
public static void main(String[] args) {
int[] a = {3,1,6,2,5}; // 5条数据,外层循环四次
// 最小的元素下标
int minIndex;
for(int i = 0; i < a.length-1; i++){
// 一开始假设最小元素就是数组中的第一个元素
minIndex = i;
for (int j = i+1; j < a.length; j++) {
if (a[j] < a[minIndex]){
minIndex = j;
}
}
// 这个判断的目的是减少没必要的交换量,不加也可以
if (minIndex != i){
int temp = a[minIndex];
a[minIndex] = a[i];
a[i] = temp;
}
}
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
结果:
1
2
3
5
6