排序算法——选择排序

2017-07-22  本文已影响0人  令狐蛋挞

原理

数据分为 有序 | 无序两个部分。以升序为例, 遍历未排序部分,找到最小值,加到有序末尾。重复该过程,直到有序部分等于数据源长度。

复杂度分析

平均时间复杂度为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;
        }
    }
上一篇下一篇

猜你喜欢

热点阅读