选择排序(SelectionSort)

常见的排序算法:

选择排序(SelectionSort):

从头开始遍历,每次都取剩余元素的最小值与当前下标i的值进行交换,每完成一次循环将固定一个元素的位置(第n次循环将确定第n小的数据的位置)
将数组分为两部分array[0…i-1]和array[i…n-1],每次循环后的array[0…i-1]都是排好序的

表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,
数据规模越小越好。唯一的好处可能就是不占用额外的内存空间

public class SelectionSort {
    public static void main(String[] args) {
        int[] array = {10,9,8,7,6,5,4,3,2,1};

        System.out.println("排序前:");
        System.out.println(Arrays.toString(array));

        array = selectiontSort(array);

        System.out.println("\n排序后:");
        System.out.println(Arrays.toString(array));
    }
    public static int[] selectiontSort(int[] array){
        int count = 0;
        for (int i=0;i<array.length-1;i++){
            //假设当前元素为剩余元素中的最小值,取该元素的下标
            int min = i;
            //j=i+1;比i小的元素都已经排好序了(从小到大)
            for (int j=i+1;j<array.length;j++){
                count++;//统计循环次数
                //如果遇到比当前元素小的,那么去其下标替换当前元素下标,保证min中存储的一直是当前最小元素的下标
                if(array[min]>array[j]){
                    min = j;
                }
            }
            //找到本次循环的最小值下标后,将最小值与当前元素i交换值,每完成一次循环将固定一个元素的位置(当前最小值)
            int temp = array[i];
            array[i] = array[min];
            array[min] = temp;
        }
        System.out.println("\n本次排序循环了"+count+"次");
        return array;
    }
}![在这里插入图片描述](https://img-blog.csdnimg.cn/2019082914405271.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxOTM5MDIw,size_16,color_FFFFFF,t_70)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值