排序--选择排序(Java语言实现)

选择排序

所谓选择排序,明确目的就是寻找未确位置元素里面的最小元素的索引。用一个简单的例子来解释其思想,如数列arr={9,1,5,8,3,7,4,6,2},对数列进行遍历,i从0循环到8,我们令min=i。这里令min=i是为了在i从0循环到8时,逐渐确定第0,1,2…等位置的元素。先假设当前要确定的元素是未确定元素里面最小的元素,之后进行逐个比较,找到最小的元素,将其位置即索引赋给min。
先看代码。

    public static void selectSort(int[] arr){
        if(arr==null || arr.length < 2){
            return;
        }
        for (int i=0;i<arr.length;i++){
            int min = i;
            
            for(int j=i+1;j<arr.length;j++){
                min = arr[min]>arr[j]?j:min;
                /*
                if(arr[min] > arr[j])
                    min = j;
                */
            }
            swap(arr,min,i);
        }
    }
}

i从0循环到8,就是要逐个确定元素,后面还有个for循环是为了比较比arr[min]还要小的元素,从而得到最小元素的索引位置。
当i=0时,min=0,比较arr[min]与之后元素的大小,arr[1]>arr[min],即9>1,此时找到了比arr[min]要小的元素,将这个下标赋给min,即此时min=1,之后再将arr[min]与arr[2],arr[3]…比较,发现arr[min]是最小的,跳出第二个for循环,将0索引位置与min位置元素交换,{1,9,5,8,3,7,4,6,2}
当i=1时,0索引位置元素已确定,现确定1索引位置的元素,还是令min=i,即min=1,进入第二个for循环,arr[1]=9>arr[2]=5,min=2。下次循环,arr[min]<arr[3]=8未进行操作。在进行循环,arr[min]=5>arr[4]=3,进行索引赋值操作,min=4。在往后的逐个比较中,得到未确定的所有元素里面最小元素的索引为8,即min=8,将min位置元素与第二个元素交换,即{1,2,5,8,3,7,4,6,9}。
之后循环类似,逐个确定元素,与冒泡相比,选择排序是增加一个变量用来表示最小元素的索引,然后将要确定的位置与其交换。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值