1冒泡排序的原理
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个位置。
2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
arr{10,5,20,80,42,32};
function arr1(arr) { var len = arr.length;
//外层循环,表示需要排序的次数,排序次数为数组length-1次,每次找到最小的数
for (var i = 0; i < len - 1; i++) {
// 内层循环表示数组元素与其他元素交换的次数,交换次数与索引规律为 j=arr1.length-i-1;比较他们的大小;
for (var j = 0; j < len - 1 - i; j++) {
// 使用if判断,相邻两个数组元素大小,设置中间变量temp来完成位置交换。
if (arr[j] < arr[j + 1]) {
var temp = arr[j]; //定义变量temp第一个元素
arr[j] = arr[j + 1]; // 将arr[j+1]赋值给arr[j]
arr[j + 1] = temp; //将原始的arr[j]值赋值给arr[j+1],完成arr[j]和arr[j+1]的数据互换
}
}
}
return arr;
}
代码执行
已知无序数据a[1],a[2],a[3],a[4],a[5],a[6]…a[n];按降序处理首先比较a[1],a[2]的值当a[2]大于a[1]交换位置否则不执行在比a[2],与a[3]的大小以此类推 处理一轮后则能获得一个最小值a[n];在对a[1]到a[n-1]进行循环;一直处理n-1轮后结束循环
外循环的次数是固定为length-1;即使在中间已经排好顺序旦循环仍会执行
直到循环结束
第一次循环结束结果为 10 20 80 42 32 5
第二次循环结束结果为20 80 42 32 10 5
第三次循环结束结果为80 42 32 20 10 5
第四次循环结束结果为80 42 32 20 10 5
第五次循环结束结果为80 42 32 20 10 5
冒泡排序的优缺点
优点:简单 稳定
缺点:慢每次只能移动两个数据的位置。