原理
数据分为 有序 | 无序两个部分。以升序为例, 遍历未排序部分,找到最小值,加到有序末尾。重复该过程,直到有序部分等于数据源长度。
复杂度分析
平均时间复杂度为O(n^2)
时间复杂度最坏为O(n^2)
空间复杂度为 O(1)
不稳定
代码实现
public void sort(List<V> srcList, Comparator<V> comparator) {
if (srcList == null || srcList.size() <= 2) {
return;
}
V min = null;
V element = null;
int minIndex = 0;
for (int index = 0; index < srcList.size(); index++) {
for (int j = index; j < srcList.size(); j++) {//找到最小值
element = srcList.get(j);
if (min == null || comparator.compare(element, min) < 0) {
minIndex = j;
min = element;
}
}
V temp = srcList.get(index);
srcList.set(index, min);//最小值加到有序末
srcList.set(minIndex, temp);
min = null;
}
}