数组案例练习进阶版---对数组中的元素进行排序(选择法)

上期文章当中,我们一起了解了怎样查找数组中的元素,今天,再让我们来看一看怎样对数组中的元素进行排序吧。

再java中,关于数据的排序手段,多种多样,例如:选择法排序、冒泡法排序、快速排序等等

那么基于我们之前做过有关于获取数组中的最大值的练习,今天我们就来讲一讲,和这个相关的选择法吧:

首先它的原理是这样的:

有这样一个长度为5的数组,里面的5 个元素分别为:28,43,16,35,27

很显然,这五个数组有大有小,也没有顺序

那么怎样对其进行排序呢?

我们就先把其中的最大值选择出来,很显然,是43,然后我们把它和最后一个位置的元素进行交换,这样,最后一个位置就一定是最大值了,即:

然后红色区域的数字我们就先不去管它了,继续再蓝色区域中开启第二轮循环,选择新的最大值,这样第二大的数字就又被放到蓝色区域的最后了 ,我们把这个数字也加入红色区域,再在蓝色区域内进行新的循环...依次类推,终有一刻,数组会变成这个样子:

此时,长度为5的数组当中,经历了四次选择最大值并换位的步骤后,四个最大值已经被找到并被依次放入了最后的位置。

我们发现,当数组变为这样时,数组顺序就已经被排好了,因此我们也就不再需要第五次的选择以及换位了,因此,我们在循环这个过程时,只需要寻找数组的长度-1次就好了。

明白了原理后,我们来看代码:

public class Sort {
    public static void main(String[] args) {
        int[] nums = new int[]{28,43,16,35,27};//使用静态初始化的方式为数组赋初值
        //定义两个变量,一个用来储存最大位置的下标,一个作为临时变量实现元素的交换
        int maxIndex,temp;
        for(int i=0;i<nums.length-1;i++){//有5个元素,所以进行四轮比较,i为0,1,2,3,正好四次
            maxIndex=0;//假定第一个元素是最大的
            //从第二个元素开始依次和当前的最大值比较,
            //每一大轮的选择并换位后,代表轮数的i的值会增加1。
            //我们正好在这里-i,寓意着把每轮换位后扩大的红色区域减掉
            for (int j=1;j< nums.length-i;j++){            
                if(nums[j]>nums[maxIndex]){//谁比当前的最大值还大
                    maxIndex=j;//谁就是新的最大值
                }
            }
            //代码运行至此,最新的最大值一定是当前需要比较的数字中,最大的了
            //下面三行代码是对最大值和最后一个位置进行一个交换
            //由于直接赋值会覆盖,我们需要一个临时变量temp
            //先把最后一个位置的元素给temp,nums.length代表数组长度,-1代表最后一个元素
            //-i代表减掉红色区域
            temp=nums[nums.length-1-i];
            //再把最大值放进最后一个位置
            nums[nums.length-1-i]=nums[maxIndex];
            //再把temp里临时存着的最后位置的原本的元素放进最大值那个位置
            nums[maxIndex]=temp;
        }
        for (int i=0;i< nums.length;i++){
            System.out.println(nums[i]);//输出每个元素
        }
    }
}

那么今天的内容就到这里啦,如果存在哪些疑问或问题欢迎大家指出,我们下期再见~

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值