上期文章当中,我们一起了解了怎样查找数组中的元素,今天,再让我们来看一看怎样对数组中的元素进行排序吧。
再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]);//输出每个元素
}
}
}
那么今天的内容就到这里啦,如果存在哪些疑问或问题欢迎大家指出,我们下期再见~