一、简介
选择排序( Selection sort)是一种简单直观的排序算法。它的工作原理是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最前或最后,直到全部待排序的数据元素排完。
二、动图展示
选择排序示意图
三、实现
/**
* 易于理解的写法
*
* @param arrays
*/
public static void selectionSort(int[] arrays) {
if (null == arrays || arrays.length == 0) {
return;
}
for (int i = 0; i < arrays.length; i++) {
// 最小值的索引坐标
int min_index = i;
// 最小值
int min_value = arrays[i];
// 一轮循环结束,必定找到一个最小值
for (int j = i + 1; j < arrays.length; j++) {
if (arrays[j] < min_value) {
min_value = arrays[j];
min_index = j;
}
}
// 如果最小值索引坐标不等于初始值,则发现最小值,否则最小值就是当前循环第一个元素
if (min_index > i) {
int temp = arrays[i];
arrays[i] = min_value;
arrays[min_index] = temp;
}
}
}
/**
* 优化的写法
*
* @param arrays
*/
public static void optimizationSelectionSort(int[] arrays) {
if (null == arrays || arrays.length == 0) {
return;
}
for (int i = 0; i < arrays.length; i++) {
// 最小值的索引坐标
int min_index = i;
// 一轮循环结束,必定找到一个最小值
for (int j = i + 1; j < arrays.length; j++) {
if (arrays[j] < arrays[min_index]) {
min_index = j;
}
}
// 如果最小值索引坐标不等于初始值,则发现最小值,否则最小值就是当前循环第一个元素
if (min_index > i) {
int temp = arrays[i];
arrays[i] = arrays[min_index];
arrays[min_index] = temp;
}
}
}