<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
/*
冒泡排序 找到最大的数据 放在数组的最后面
【1】相邻的两个数据进行比较
【2】如果前面的数据 比后面的数据大,这两个数据就交换
*/
// var num1 = 10;
// var num2 = 20;
// num1 =20 num2 =10
// var num3 = num1;
// num1 = num2;
// num2 = num3;
// console.log(num1, num2);
var arr = [10, 2, 34, 66, 5, 90, 6, 7];
/*
i = 0 10 > 2 交换 [2, 10, 34, 66, 5, 90, 6, 7] i++
i = 1 10 > 34 不交换 [2, 10, 34, 66, 5, 90, 6, 7] i++
i = 2 34 > 66 不交换 [2, 10, 34, 66, 5, 90, 6, 7] i++
i = 3 66 > 5 交换 [2, 10, 34, 5, 66, 90, 6, 7] i++
i = 4 66 > 90 不交换 [2, 10, 34, 5, 66, 90, 6, 7] i++
i = 5 90 > 6 交换 [2, 10, 34, 5, 66, 6, 90, 7] i++
i = 6 90 > 7 交换 [2, 10, 34, 5, 66, 6, 7, 90] i++
i = 7 arr[7] 得到是最大值 , arr[i] > arr[i+1]
*/
// j < arr.length 外层循环需要循环7次 每一次执行外层循环都是找到一个最大值放在数组的后面
// 人如果已经排序号6个数,剩下一个就是最小的值放在最前面的,不需要去对比
// 不需要执行最后一次循环, 只执行6次循环 j < arr.length -1
for (var j = 0; j < arr.length - 1; j++) {
// arr.length = 8
for (var i = 0; i < arr.length - j - 1; i++) {
// 当i = 7 arr[7] > arr[8] 数组中不存在arr[8] 这个数据 ,不需要对比
// 也就是说i = 7的时候不需要对比,这个循环不需要在执行
if (arr[i] > arr[i + 1]) {
var temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp
}
}
}
// 完成一次循环,得到一个最大值,放在数组的最后面
// for (var i = 0; i < arr.length - 0; i++) {
// if (arr[i] > arr[i + 1]) {
// var temp = arr[i];
// arr[i] = arr[i + 1];
// arr[i + 1] = temp
// }
// }
// 第二次对比,已经得到一个最大值放在最后面,最后一个值不需要比较,循环次数减-1
// for (var i = 0; i < arr.length - 1; i++) {
// if (arr[i] > arr[i + 1]) {
// var temp = arr[i];
// arr[i] = arr[i + 1];
// arr[i + 1] = temp
// }
// }`在这里插入代码片`
// 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);
</script>
</body>
</html>
前端面试题 冒泡排序(有详细讲解)
猜你喜欢
转载自blog.csdn.net/weixin_43901780/article/details/106843221
今日推荐
周排行