//怎么理解for,while循环作用 //怎么使用嵌套循环 import java.util.Arrays; import java.util.Random; public class BubbleSort { public static void main(String[] args){ //冒泡排序流程 //第一次 从第1个数开始前一个数和后一个数逐个比较,将较大的数放在最后面,这样最大的数一定在最后面 //第二次 按照第一次的来,这样不同点在于少比较了最后一个数,也就是新的待排数组长度少1.结果不仅最大的在后面,第二大的一定也在最后面, //... //第n次,按照第一次的来,少比较了n-1个数,新的待排数组长度少1,第n大的数在最后面。 //... //直到内层循环不需要进行了,每次排成功一个位置,新的待排数组长度-1 //所以外存循环就是控制内存循环需要执行几次, //内层循环用于将待排数组冒泡比较。 int[] arr = new int[10]; //for是计数型,比较方便,while可以将条件写为true。 for的; //这里最终次数用 count全局变量统计-- int count = 0; //标志,开始是false boolean flag; byte b1 = 10; byte b2 = 20; System.out.printf("b1^b2=%d",b1^b2); // 1010^10100 = 11110 = 2+4+8+16 = 30; Random random = new Random(); // for(var num : arr){ // //只能查看,不能赋值 // num = random.nextInt(); // } for(int i= 0 ;i<arr.length ;i++){ arr[i] = random.nextInt(100); } System.out.println("排序前"+ Arrays.toString(arr)); while(true){ flag = true; //内层应该用for,因为满足条件 for(int j = 0;j<arr.length-1-count;j++){//这里需要-1(比较n-1次),最后的就不需要比较了。长度变了 if(arr[j]<arr[j+1]){ //注意位运算,会自动类型转换, flag = false;//不能确定一定是顺序的,反之,没有进入条件说明是有序的 int temp = arr[j]^arr[j+1]; arr[j] ^= temp; arr[j+1] ^= temp; } } count++; //什么时候结束呢? --虽然是死循环,但是可以通过break结束,且java允许死循环,提供服务的呗 //因为我不确定执行多少次,但是可以通过flag标志知道啊 if(flag){ break; } //相当于条件是!flag的do while } System.out.println("排序后"+ Arrays.toString(arr)); System.out.println("一共执行了"+count+"次");//最多是10次..最后一个数是最大的数。。这里是从后往前,一次只能移动一个单位 //其实最后一次最内层循环一次都没有执行 。这就是说最多是10次,但是9次不影响结果 //知道最多是length次 //探究for:型循环 //逻辑 ,探究外存循环最多次数.尽可能少 //若数组长度是1,那么就不需要判断 //若数组长度是2,需要1次就行 //数组长度是3,需要2次, //...长度为n,就是n-1次 for(int i = 0;i<arr.length-1;i++){ for(int j= 0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1]){//注意这里下标 int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } System.out.println("排序后"+ Arrays.toString(arr)); //这样就足够了 //各有各的好处,虽然时间慢但是简单易操作,比价灵活 } }
javaSE练习Day02 冒泡排序
最新推荐文章于 2022-08-23 10:11:25 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)