冒泡排序
场景
- 对数组
var array = [5, 3, 1, 2, 7];
的内容排序
分析
-
数据量小,操作步骤少,可用简单的冒泡排序实现此功能
-
排序前数组:
[5, 3, 1, 2, 7]
-
使用双重for循环实现
i === 0;
(j + i + 1) === 1;
4次
- 第一次轮循1:
[3, 5, 1, 2, 7]
j = 0; (j + i + 1) === 1;交换5,3 - 第一次轮循2:
[3, 1, 5, 2, 7]
j = 1; (j + i + 1) === 2;交换5,1 - 第一次轮循3:
[3, 1, 2, 5, 7]
j = 2; (j + i + 1) === 3;交换5,2 - 第一次轮循4:
[3, 1, 2, 5, 7]
j = 3; (j + i + 1) === 4;不交换
i === 1;
(j + i + 1) === 2;
3次
- 第二次轮循1:
[1, 3, 2, 5, 7]
j = 0; (j + i + 1) === 2;交换3,1 - 第二次轮循2:
[1, 2, 3, 5, 7]
j = 1; (j + i + 1) === 3;交换3,2 - 第二次轮循3:
[1, 2, 3, 5, 7]
j = 2; (j + i + 1) === 4;不交换
i === 2;
(j + i + 1) === 3;
2次
- 第三次轮循1:
[1, 2, 3, 5, 7]
j = 0; (j + i + 1) === 3;不交换 - 第三次轮循2:
[1, 2, 3, 5, 7]
j = 1; (j + i + 1) === 4;不交换
i === 3;
(j + i + 1) === 4;
1次
- 第四次轮循1:
[1, 2, 3, 5, 7]
j = 0; (j + i + 1) === 4;不交换 - 整个轮循结束
轮循后结果为: [1, 2, 3, 5, 7]
原理
- 对数组进行至少
array.length
次轮循 - 每次轮循都将数组中最大或最小值置于数组的底部或者顶部
- 至少轮循
array.length
次后将得到有序数组
实现
for (var i = 0; i < array.length; i++) {
// 每次轮循次数根据(j + i + 1)值递减
for (var j = 0; (j + i + 1) < array.length; j++) {
// 俩俩对比数组内元素值,互换满足条件的相邻元素值
if (array[j] > array[j + 1]) {
var temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
发恳写代码