一、核心思想
比较相邻两个元素,将这两个元素中较大的值往后移动
二、过程分析
从核心思想出发分析比较过程;
指针 j 从0位置开始遍历数组,遍历过程中比较 j 与 j+1 位置的元素值,并将较大值放在后面;
经过一次比较之后,不难发现:数组中的最后一个元素是最大值;而在下一轮比较中此值不需要参与;
接下来仅需要对新数组(原数组去掉最后一个元素)进行相邻位置元素两两比较即可;
每经历一轮相邻元素比较即可找出所有参与比较的元素中的最大值;
那么需要比较几轮?由于每轮会产生一个最大元素,所以需要比较 nums.length-1轮
指针 j 的边界:随比较的轮数而变,左边界不变(为0),右边界为 ( j<nums.length-1-轮数 )
相邻元素两两比较,指针 j 不需要达到最后一位,也不能达到最后一位,此条件决定了右边界的位置
三、代码
public void maopao(int nums[]){
for(int i=0; i<nums.length-1; i++){ //需要比较的轮数
for(int j=0; j<nums.length- 1-i ; j++){ //需要比较的元素范围逐步缩小
if( nums[j] > nums[j+1] ){
int temp=nums[j+1];
nums[j+1]=nums[j];
nums[j]=temp;
}
}
}
System.out.println(Arrays.toString(nums));
}