选择排序(从小到大)

这篇博客详细介绍了选择排序的原理和实现过程。通过逐步解析选择排序的过程,展示了如何将数组从小到大排序。文章通过示例解释了选择排序的四次迭代,并提供了简单的Java代码实现,演示了如何利用循环优化代码,实现数组的自动排序。

选择排序

原理:从0索引开始,依次和后面的元素比较,小的往前放,第一次完毕,最小值出现在最前面
先画一张,解释一下原理:
在这里插入图片描述
第一次选择排序:拿原数组来比较,从索引为0元素开始,即先比较20跟60,20较小,所以位置不变,再比较20跟80,位置不变,再比较20跟50,位置不变,再比较20跟10,10比20小,所以交换位置;这样,第一次排序就结束了
第二次选择排序:拿第一次排序后的数组比较,从索引为1元素开始,即先比较60跟80,位置不变,再比较60跟50,50较小,交换位置,再比较50跟20,20较小,交换位置;这样,第二次排序就结束了
第三次选择排序:拿第二次排序后的数组比较,从索引为2元素开始,即先比较80跟60,60较小,交换位置,再比较60跟50,排在后面的50较小,交换位置;这样,第三次排序就结束了、
第四次选择排序:拿第三次排序后的数组比较,从索引为3元素开始,即比较最后两个元素80跟60,60较小,交换位置;这样,得到的数组就排好序了
总结分析:如果一个数组arr.length=5;也就是5个元素,那么它需要经过(arr.length-1)次,也就是4次排序;每一次排序时需要比较(arr.length-1)次,也就是4次,每二次排序时需要比较(arr.length-1-1)次,也就是3次,每三次排序时需要比较(arr.length-1-1-1)次,也就是2次,每四次排序时需要比较(arr.length-1-1-1-1)次,也就是1次,最后一次比较完后,数组的顺序就排好了
代码实现

package org.westos.demo2;

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int[] arr = {20, 60, 80, 50, 10};
        //第一次排序
        int index=0;
        for (int i = 1+index; i < arr.length; i++) {
            //从索引0的元素开始,依次比较该元素跟后面所有元素,小的往前放
            if(arr[index]>arr[i]){
                int temp = arr[i];
                arr[i] = arr[index];
                arr[index] = temp;
            }
        }
        System.out.println(Arrays.toString(arr));
        //第二次冒泡排序
        int index2=1;
        for (int i = 1+index2; i < arr.length; i++) {
            //从索引1的元素开始,依次比较该元素跟后面所有元素,小的往前放
            if(arr[index2]>arr[i]){
                int temp = arr[i];
                arr[i] = arr[index2];
                arr[index2] = temp;
            }
        }
        System.out.println(Arrays.toString(arr));
        //第三次冒泡排序
        int index3=2;
        for (int i = 1+index3; i < arr.length; i++) {
            //从索引2的元素开始,依次比较该元素跟后面所有元素,小的往前放
            if(arr[index3]>arr[i]){
                int temp = arr[i];
                arr[i] = arr[index3];
                arr[index3] = temp;
            }
        }
        System.out.println(Arrays.toString(arr));
        //第四次冒泡排序
        int index4=3;
        for (int i = 1+index4; i < arr.length; i++) {
            //从索引3的元素开始,依次比较该元素跟后面所有元素,小的往前放
            if(arr[index4]>arr[i]){
                int temp = arr[i];
                arr[i] = arr[index4];
                arr[index4] = temp;
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

看看每一次排序后的结果:
在这里插入图片描述
刚开始写代码,可以分步实现,即把每一次排序的代码写好,能得到最终排好序的数组,然后在此基础上,在尽可能的简化代码;由分布代码可以看出,除了开始的索引值不同以外,其他的代码都是一样的,而且索引值呈现递增趋势;这样,就可以在循环外再套一个循环,起到索引值递增的作用,达到简化代码的效果
简单代码

package org.westos.demo2;

import java.util.Arrays;

class Demo {
    public static void main(String[] args) {
        int[] arr = {20, 60, 80, 50, 10};
        for (int index = 0; index < arr.length; index++) {
            for (int i = 1+index; i < arr.length; i++) {
                //从索引i的元素开始,依次比较该元素跟后面所有元素,小的往前放
                if(arr[index]>arr[i]){
                    int temp = arr[i];
                    arr[i] = arr[index];
                    arr[index] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

看看结果:
在这里插入图片描述
可以看出,输出的数组是从小到大排序的;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值