java经典排序算法---选择排序

     首先理解定义(百度百科)

**选择排序(Selection sort)**是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
举个简单的例子:一组数据 2,1,9,7,3
使用选择排序:第一次排序的结果为 1,2,9,7,3
第二次排序的结果为 1,2,9,7,3
第三次排序的结果为 1,2,3,7,9
第四次排序的结果为 1,2,3,7,9
我们可以分析下过程,根据它的定义
第一次是找到这个数组的最小值放到第一位,同时把第一位的值交换到和它互换元素的位置,所以第一次排序的结果为1,2,9,7,3
第二次其实是在2,9,7,3中找最小值,因为2为其中最小值了,所以第二次排序结果为1,2,9,7,3
第三次其实是在9,7,3中找最小值,发现3最小于是将3与9的位置互换,第三次排序结果为1,2,3,7,9
第四次在7,9中找最小值,所以排序结果为1,2,3,7,9

根据分析我们可以得出需要定义两个变量 最小值min以及最小值的索引minIndex,也是需要双重循环去做,外面的一层循环主要是对元素进行互换,里面的循环主要是找到最小值:

根据代码我们可以更清晰的分析

 public static void main(String[] args) {
        //随机数组
        int arr[] = {2, 1, 9, 7, 3};
        // 12973
        for(int i=0;i<arr.length-1;i++){
            //假设最小值的索引为0
            int minIndex=i;
            //假设最小值为第一个元素
            int min=arr[i];
            //第一次循环i=0;所以我们直接拿第二个元素和它比较
            //也就是j从1开始
            for(int j=i+1;j<arr.length;j++){
                //如果后面一个元素比前面元素的值小
                //则将这个值赋值为最小元素,并记录它的索引位置
               if(min>arr[j]){
                   //重置最小值
                   min=arr[j];
                   //重置最小值索引
                   minIndex=j;
               }
            }
//内层循环找出最小值及索引 ,因为外层循环从i=0开始,如果不等于初始值,则元素互换
            if(minIndex!=i){
                //进行交换   将最小值放在i的位置
               arr[minIndex]=arr[i];
               //每次循环的最小值在i的位置
               arr[i]=min;
            }
            System.out.println("第"+(i+1)+"次排序为"+Arrays.toString(arr));
        }
        System.out.println("最终排序为"+Arrays.toString(arr));
    }

运行结果如下

1次排序为[1, 2, 9, 7, 3]2次排序为[1, 2, 9, 7, 3]3次排序为[1, 2, 3, 7, 9]4次排序为[1, 2, 3, 7, 9]
最终排序为[1, 2, 3, 7, 9]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值