手写一个冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。

思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第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);
	
}

}

猜你喜欢

转载自blog.csdn.net/GG__bond1/article/details/89331126
0条评论
添加一条新回复