排序算法之选择排序

选择排序算法:每一趟找到最小的值,记录最小值index,交换最小值到最后结果位置。

/**
 * 选择排序算法.
 * 
 * @author peiyu
 */
public class SelectorSort {
    public static List<Integer> sort(List<Integer> datas) {
        for (int i = 0; i < datas.size() - 1; i++) {
            int minIndex=i;
            for (int j = i+1; j < datas.size(); j++) {
                if (datas.get(minIndex)>datas.get(j)) {
                    minIndex=j;
                }
            }
            if (minIndex!=i) {
                Integer minValue = datas.get(minIndex);
                datas.set(minIndex, datas.get(i));
                datas.set(i, minValue);
            }

            System.out.println("【第" + (i+1) + "】趟结果:" + datas);
        }
        return datas;
    }
    public static void main(String[] args) {
        List<Integer> datas = new ArrayList<Integer>();
        for (int i = 0; i < 10; i++) {
            datas.add(new Random().nextInt(100));
        }
        System.out.println("【排序前】:" + datas);
        sort(datas);
        System.out.println("【排序后】:" + datas);
    }
}

测试结果:

【排序前】:[2, 11, 64, 79, 22, 94, 92, 96, 17, 21]
【第1】趟结果:[2, 11, 64, 79, 22, 94, 92, 96, 17, 21]
【第2】趟结果:[2, 11, 64, 79, 22, 94, 92, 96, 17, 21]
【第3】趟结果:[2, 11, 17, 79, 22, 94, 92, 96, 64, 21]
【第4】趟结果:[2, 11, 17, 21, 22, 94, 92, 96, 64, 79]
【第5】趟结果:[2, 11, 17, 21, 22, 94, 92, 96, 64, 79]
【第6】趟结果:[2, 11, 17, 21, 22, 64, 92, 96, 94, 79]
【第7】趟结果:[2, 11, 17, 21, 22, 64, 79, 96, 94, 92]
【第8】趟结果:[2, 11, 17, 21, 22, 64, 79, 92, 94, 96]
【第9】趟结果:[2, 11, 17, 21, 22, 64, 79, 92, 94, 96]
【排序后】:[2, 11, 17, 21, 22, 64, 79, 92, 94, 96]

选择排序的时间复杂度:简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数永远都是N (N - 1) / 2。而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0。当序列反序时,移动次数最多,为3N (N - 1) / 2。

所以,综上,简单排序的时间复杂度为 O(N2)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值