Day13选择排序优化

选择排序简介

选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。

选择排序思路分析图

image-20220112211432324

如何优化选择排序

思路

建议在一定数据量的情况下查看效果,比如排序80000个随机数据,会比未优化的快很多(效果很明显)

因为减少了很多没必要的置换,未优化前的选择,其实和冒泡很相似(只不过冒泡是先把后面的排好,选择是先把前面的排好)

选择排序(已优化)
* 思路:
* 1、首先,先假定最小值和最小值的下标索引
* 2、然后进行寻找,如果找到比最小值还要小的,进行最小值和最小值下表索引的重置
* 3、然后进行位置置换(换到本次循环的头元素位置,即 i )

实现代码

/**
     * 选择排序(已优化)
     * 思路:
     * 1、首先,先假定最小值和最小值的下标索引
     * 2、然后进行寻找,如果找到比最小值还要小的,进行最小值和最小值下表索引的重置
     * 3、然后进行位置置换(换到本次循环的头元素位置,即 i )
     * @param nums
     */
public static void selectSort(int[] nums){
    for(int i = 0; i < nums.length - 1; i++){
        int min = nums[i];
        int minIndex = i;
        for (int j = i + 1; j < nums.length; j++){
            // 如果最小值 比 后面的数大
            if (min > nums[j]){
                // 给最小值和最小值的下标 赋值(更小的值)
                min = nums[j];
                // 重置 minIndex
                minIndex = j;
            }
        }
        // 置换位置(这样可以减少不必要的置换,比如本身就在目标位置的情况下)
        if (minIndex != i){
            nums[minIndex] = nums[i];
            nums[i] = min;
        }
    }
}

未优化的代码

/**
     * 未优化的选择排序
     * @param nums
     */
public static void selectSort2(int[] nums){
    int temp = 0;
    for (int i= 0; i < nums.length - 1; i++){
        for (int j = i + 1; j < nums.length; j++){
            // 说明假设的最小值,并非最小值
            if (nums[i] > nums[j]){
                temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
            }
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值