原理:比较两个相邻的元素,将值大的元素交换至右端。
思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。
class _48Maopao{
public static void main(String[] args){
int[] zed={6,2,4,1,5,7};
max(zed);
}
static void max(int[] arr){
//中转站 转换arr[i]和arr[i+1]的值
int temp=0;
/*第一趟排序(外循环)
外循环控制 有几次冒泡 j<length-1可以循环完数组所有值间的比较
一共要5次冒泡 长度为6 所以冒泡次数length-1
第一次把最大值交换到最后 要5次 第二次把第二大的交换到倒数第二
要4次 第三次把剩下的最大值交换到最后 循环5次
内循环控制 保证每两两值之间可以比较一次 所以i<length-1
arr[1]>arr[2] arr[2]和arr[1]交换 但是之前arr[2]不能比较arr[0]
第一次 前 6 2 4 1 5 7 交换 6>2
后 2 6 4 1 5 7
第二次 2 6 4 1 5 7 6>4 交换
2 4 6 1 5 7
第三次 2 4 6 1 5 7 6>1 交换
2 4 1 6 5 7
第四次 2 4 1 6 5 7 6>5 交换
2 4 1 5 6 7
第五次 2 4 1 5 6 7 不交换 因为6<7
第二趟排序(外循环)
第一次 2 4 1 5 6 7 2<4不交换
第二次 2 4 1 5 6 7 4>1 交换
2 1 4 5 6 7 4
第三次 4<5 不交换
第四次 2 1 4 5 6 7 4 5<6 交换
共有length个值 length-1是因为最后一次不用判断
所以共比较length 减一次
*/
for (int j=0;j<arr.length-1 ;j++ ){
//控制的是arr[0]和后面的值 比后面的值
//且要保证arr[i]能比较到每个值 到最后arr[length-1]
//所以arr[i]比较arr[i+1] i<arr.length-1是因为i+1会超出长度
for (int i=0;i<arr.length-1 ; i++){
if(arr[i]>arr[i+1]){
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
beautiful_1.bea(arr);
}
}