Java算法 选择排序

选择排序原理

① 每一次遍历的过程中,都假设未排序的序列的第一个索引处的元素为最小值,依次遍历其他元素与这个最小值进行比较,如果当前索引处的值大于其他某个索引处的值为最小值,最后可以找到最小值所在位置的索引。
② 交换第一个索引处和最小值所在索引处的值。

简单来说,就是每次遍历都把未排序的序列的最小值放到序列的最前端。在这里插入图片描述
图片转载自:https://www.bilibili.com/video/BV1iJ411E7xW?p=15

如图所示,第一次遍历时将最小值索引设置为0,对应的值大小为4。依次向右遍历,4小于6、8、7、9,因此最小值索引仍为0。继续遍历,4大于2,因此最小值索引变为5。继续向后,10大于2,1小于2,因此最小值索引变为7。
最后索引0处的值与索引7处的值进行交换。
此时,索引0处(及之前)的值为有序的序列,接下来只需要对索引1到索引7之间的序列进行排序即可。

public class Select {
    public static void sort(Comparable[] a){
        for(int i = 0;i < a.length-1; i++){  // 每次排序需要操作的元素个数 第一次需要遍历所有元素,每次减少一个
            int minIndex = i;  // 最小值的索引
            for(int j = i+1; j < a.length; j++){  // 需要与最小值比较的元素的个数
                if(greater(a[minIndex],a[j])){
                    minIndex = j;  // 更新最小值索引
                }
            }
            exch(a,i,minIndex);
        }
    }

    private static Boolean greater(Comparable v, Comparable w){  // 比较函数 v>w时 返回True
        return v.compareTo(w)>0;
    }

    private static void exch(Comparable[] a, int i, int j){  // 交换指定索引处的值
        Comparable temp;
        temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}
时间复杂度 :O(n^2)
空间复杂度:O(1)
稳定性:不稳定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值