一、交换变量
由于冒泡排序需要用到交换变量,所以需要掌握交换变量的原理
假设,左手里拿了一个苹果,右手里拿了一个橘子,想要苹果和橘子调换位置,要怎么做?可见,需要先腾出一只手。
例如:
1、先把左手苹果放到桌子上
2、把右手橘子给左手
3、右手再拿起桌子上的苹果
示例:
var num1 = 10; // 左手苹果
var num2 = 20; // 右手橘子
var temp = num1; // 把左手苹果放到桌子上
num1 = num2; // 右手橘子给左手
num2 = temp; // 右手再拿起桌子上的苹果
console.log(num1, num2); // 即可交换位置
二、冒泡排序
冒泡排序是一种算法,将一系列的数据按照一定的顺序排列,从大到小或从小到大
过程演示
冒泡排序是将第一位数据和后面一位数据比较,若比较结果为真,两个数据交换位置,再进行下次比较,若比较结果为假,直接进行下次比较
例如:
有一组数据:5,4,3,2,1
第一次比较:5和4比较,5>4,将5和4调换位置,依次类推可得到数据:4,3,2,1,5 前后互相比较了四次
第二次比较:3,2,1,4,5 比较了三次
第三次比较:2,1,3,4,5 比较了两次
第四次比较:1,2,3,4,5 比较了一次
若数据的长度为length,则比较的次数为length-1 每次前后比较的次数为 length-1-i i(从0开始,依次递增)
由此可见,每循环一次,数据都交换了一遍,则比较的次数为外层for循环,前后交换的次数为内层for循环
代码实现:
<script>
var arr = [1,2,3,4,5]; // 数组存储的数据
for (var i = 0; i < arr.length - 1; i++) { // 比较的次数
for (var j = 0; j < arr.length - 1 - i; j++) { // 前后交换的次数
if (arr[j] < arr[j + 1]) { // 判断大小
var temp = arr[j]; // 若判断的结果为真,则交换两个变量,若为假,直接进行下次比较
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
console.log(arr);
</script>