概念
每一次从待排序数组中找到最小值(最大值)的下标,然后将最小值(最大值)跟待排序数组的第一个进行交换,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。反复进行操作直到待排序的数组全部有序
图解
稳定性
选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推。在一趟排序中,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。例如:序列5 8 5 2 9,第一遍选择第一个元素5和元素2交换,那么序列中两个5的相对顺序被破坏,所以认为选择排序不是稳定的排序算法
CODE
public class SelectionSort {
private static final List<Integer> LIST = new ArrayList<>() {{
add(2);
add(3);
add(4);
add(5);
add(8);
add(7);
add(4);
}};
public static void main(String[] args) {
for (int i = 0; i < LIST.size(); i++) {
int minIndex = i;
for (int j = i + 1; j < LIST.size(); j++) {
minIndex = LIST.get(minIndex) > LIST.get(j) ? minIndex : j;
}
// swap -- 交换
swap(LIST, minIndex, i);
}
System.out.println(LIST);
}
public static void swap(List<Integer> list, int fromIndex, int toIndex) {
int tempVal = list.get(fromIndex);
list.set(fromIndex, list.get(toIndex));
list.set(toIndex, tempVal);
}
}
extra
😶🌫️😶🌫️😶🌫️