代码如下:
public static void main(String[] args){
//完善数组
int [] array={497,131,486}; //自己补全
//冒泡排序
for(int i =0; i < array.length -1; i++){
for(int j = 0; j < array.length -i-1;j++){
if(array[j] < array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
//输出数组
for (int i = 0; i< array.length;i++){
System.out.println(array[i]);
}
}
说明:顾名思义冒泡排序就跟鱼吐泡泡一样 可以从小到大 、也可以从大到小
举例:var arr = [23, 54, 6, 444, 5, 2, 8]
代码:需求每次冒出一个最大的
第一次 冒 23, 54, 6, 444, 5, 2, 8 第一个 和 第二个 比 不变 23, 54, 6, 444, 5, 2, 8 第二个 和 第三个 比 变 23, 6, 54, 444, 5, 2, 8 第三个 和 第四个 比 不变 23, 6, 54, 444, 5, 2, 8 第五个 和 第五个 比 变 23, 6, 54, 5, 444, 2, 8 第五个 和 第六个 比 变 23, 6, 54, 5, 2, 444, 8 第六个 和 第七个 比 变 23, 6, 54, 5, 2, 8, 444 结束 第二次 冒 23, 6, 54, 5, 2, 8, 444 第一个 和 第二个 比 ...
分析代码:有瑕疵冗余
<script> // 第一次 冒 // 23, 54, 6, 444, 5, 2, 8 第一个 和 第二个 比 不变 // 23, 54, 6, 444, 5, 2, 8 第二个 和 第三个 比 变 // 23, 6, 54, 444, 5, 2, 8 第三个 和 第四个 比 不变 // 23, 6, 54, 444, 5, 2, 8 第五个 和 第五个 比 变 // 23, 6, 54, 5, 444, 2, 8 第五个 和 第六个 比 变 // 23, 6, 54, 5, 2, 444, 8 第六个 和 第七个 比 变 // 23, 6, 54, 5, 2, 8, 444 结束 // 需求:冒出一个最大的值 // 思路 // 1. 挨个输出所有值 arr[i] // 2. 当前值arr[i] 和 下一个值比较arr[i+1] // 3. 如果大于就交换位置 var arr = [23, 54, 6, 444, 5, 2, 8] // 第一次 冒出一个最大的好没好 // for (var i=0; i<arr.length; i++) { for (var i=0; i<arr.length - 1; i++) { // 3个人比2 4个人比3次 // console.log(arr[i]) // 判断 /* i=0 arr[0] 23 > arr[1] 54 不换 【 23, 54, 6, 444, 5, 2, 8 】 i=1 arr[1] 54 > arr[2] 6 换 【 23, 6, 54, 444, 5, 2, 8 】 i=2 arr[2] 54 > arr[3] 444 不换 【 23, 6, 54, 444, 5, 2, 8 】 i=3 arr[3] 444 > arr[4] 5 换 【 23, 6, 54, 5, 444, 2, 8 】 i=4 arr[4] 444 > arr[5] 2 换 【 23, 6, 54, 5, 2, 444, 8 】 i=5 arr[5] 444 > arr[6] 8 换 【 23, 6, 54, 5, 2, 8, 444 】 i=6 是否需要走? 不需要 因为已经冒出一个最大的 // 思考:上面for循环判断是否可以优化? // 分析:总共几个数7个 // 思考:3个比出一个最大的 比2次 4个人比出一个最大的3次 // 因此:7个数 只要循环比6次 // 结果:上面长度得-1 最后一个不用比 这哥们就是最大的 */ if (arr[i] > arr[i+1]) { var temp = arr[i] arr[i] = arr[i+1] arr[i+1] = temp } } console.log(arr) // [23, 6, 54, 5, 2, 8, 444] // 第二次 冒出一个最大的 54 // 1. 输出所有数 // 2. 当前和 和 下一个比 // 3. 大于就换位置 // 思考:-1 还是 -2 // 分析:上面-1是因为 3个人比2 4个人比3次 // 然后 再减去1 // 因为:因为冒出一个最大的 -1 for (var i = 0; i<arr.length -2; i++) { if(arr[i] > arr[i+1]) { var temp = arr[i] arr[i] = arr[i+1] arr[i+1] = temp } } console.log(arr) // [6, 23, 5, 2, 8, 54, 444] // 第三次 冒 23 // for (var i=0; i<arr.length; i++) { // 思考是否需要优化? 肯定的 // 分析:3个人 比 2次, 4个人比3次 // 继续:arr.length 有7个数 比出一个最大的只要 arr.length - 1 6次 // 思考:7个数里面我们已经确定几个数字最大了? // 回答:2个 因此还得 -2 // 结果:-3 for (var i=0; i<arr.length -3; i++) { if(arr[i] > arr[i+1]) { var temp = arr[i] arr[i] = arr[i+1] arr[i+1] = temp } } console.log(arr) // 第四次 for (var i=0; i<arr.length -4; i++) { if(arr[i] > arr[i+1]) { var temp = arr[i] arr[i] = arr[i+1] arr[i+1] = temp } } console.log(arr) // 第五次 for (var i=0; i<arr.length -5; i++) { if(arr[i] > arr[i+1]) { var temp = arr[i] arr[i] = arr[i+1] arr[i+1] = temp } } console.log(arr) // 第六次 for (var i=0; i<arr.length -6; i++) { if(arr[i] > arr[i+1]) { var temp = arr[i] arr[i] = arr[i+1] arr[i+1] = temp } } console.log(arr) </script>
优化:搞公式
<script> var arr = [23, 54, 6, 444, 5, 2, 8] // 思想 // 外层控制次数 // 内存进行挨个输出对比交换 // 写代码 // 1. 先通过循环实现冒出一个最大的 // 2. 嵌套循环 外层 控制次数 即可 // 1. 先通过循环实现冒出一个最大的 // for (var i = 0; i < arr.length; i++) { // 优化:少比一次 2个人1次 3个人2次 // for (var i = 0; i < arr.length -1; i++) { // // i 是每个值的下标 // // arr[i] 每个值 // // 当前值 和 下一个值 比较 // // 大于 换 // if (arr[i] > arr[i+1]) // { // var temp = arr[i] // arr[i] = arr[i+1] // arr[i+1] = temp // } // } // console.log(arr) // 2. 嵌套循环 外层 控制次数 即可 for (var j=1; j<arr.length; j++) { // j 123456 // 分析: // 第一次 -1 因为 2个人比3次 3个人比2次 // 第二次 -2 因为第一次已经确定一个最大的 后面不用管 -2 // .. // for (var i = 0; i < arr.length -1; i++) { for (var i = 0; i < arr.length -j; i++) { // i 是每个值的下标 // arr[i] 每个值 // 当前值 和 下一个值 比较 // 大于 换 if (arr[i] > arr[i+1]) { var temp = arr[i] arr[i] = arr[i+1] arr[i+1] = temp } } } console.log(arr) </script>