[数据结构与算法] 选择排序动画及 JAVA 代码实现

目录

1. 选择排序动画

2. 选择排序 Java 实现

3. 总结

时间复杂度

空间复杂度

排序稳定性


1. 选择排序动画

 

2. 选择排序 Java 实现

public void selectionSort(int[] numbers) {
    int length = numbers.length;
    if (length <= 1) {
        return;
    }

    for (int i = 0; i < length - 1; ++i) {
        // 设置最小值的索引为当前索引
        int minIndex = i;
        for (int j = i + 1; j < length; ++j) {
            // 循环查找未排序的最小值
            if (numbers[j] < numbers[minIndex]) {
                // 设置最小值的索引值
                minIndex = j;
            }
        }
        // 当前位置就是最小位置,不做交换
        if (minIndex == i) {
            continue;
        }
        // 未排序的最小值与当前值交换
        numbers[i] ^= numbers[minIndex];
        numbers[minIndex] ^= numbers[i];
        numbers[i] ^= numbers[minIndex];
    }
}
  • 1. 重复(元素个数-1)次
    • 1.1 把第一个没有排序过的元素的索引设置为最小值索引
    • 1.2 遍历每个没有排序过的元素
      • 1.2.1 如果元素 < 现在的最小值索引处的值
      • 1.2.2 将此元素的索引设置为新的最小值索引
      • 1.2.3 将最小值索引处的值与第一个没有排序过的索引位置交换

 

3. 总结

时间复杂度

选择排序无论数组是否有序时间复杂度均为 O(n^2)

 

空间复杂度

数据交换在原数组中进行,标记位使用常数级的空间,所以空间复杂度 O(1)

 

排序稳定性

以数组 {2,5,3,5,1} 举例

第一次循环完成后:{1,5,3,5,2}

第二次循环完成后:{1,2,3,5,5}

最终数据排序完成后: {1,2,3,5,5}

对比排序后的数组和原数组,可以发现数组中两个 5 的先后顺序已经发生改变

所以选择排序是不稳定的排序

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值