冒泡排序主要是两个挨着的数比较,如果他们顺序相反就交换位置.直到没有顺序相反的为止.
比如说 声明一个数组 var arr=[5,4,3,2,1]; 把他用冒泡排序成升序排列 ,让他变成[1,2,3,4,5];
var arr = [5, 4, 3, 2, 1];
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
console.log(arr);
刚才说了 冒泡排序是两个相邻的数之间比较,var arr=[5,4,3,2,1]
第一次比较:
首先拿4跟5比,发现4比5小.是倒序.就需要交换位置,那数组就变成[4, 5, 3, 2, 1];
然后再拿3跟5比,发现3比5小.是倒序.就需要交换位置.那数组就变成[4, 3, 5, 2, 1];
然后再拿2跟5比,发现2比5小.是倒序.就需要交换位置.那数组就变成[4, 3, 2, 5, 1];
然后再拿1跟5比,发现1比5小.是倒序.就需要交换位置.那数组就变成[4, 3, 2, 1, 5];
第一轮比较完 可以发现 最大的数跑到后面去了,这一轮一共比较了四次,现在数组变成了[4,3,2,1,5];
第二次比较:
首先拿3跟4比,发现3比4小.是倒序.就需要交换位置,那数组就变成[3, 4, 2, 1, 5];
然后再拿2跟4比,发现2比4小.是倒序.就需要交换位置.那数组就变成[3, 2, 4, 1, 5];
然后再拿1跟4比,发现1比4小.是倒序.就要交换位置.那数组就变成[3, 2, 1, 4, 5];
第二轮比较完 可以发现第一轮已经把最大的数放到最后的位置了.所以这次一共比较了三次就可以了.因为最后两个5和4不用比较了 现在的数组就变成了[3,2,1,4,5];
第三次比较:
首先拿2跟3比,发现2比3小.是倒序.就需要交换位置.那数组就变成[2, 3, 1, 4, 5];
然后再拿1跟3比,发现1比3小.是倒序.就需要交换位置.那数组就变成[2, 1, 3, 4, 5];
第三轮完了以后 第三轮比第二轮少比较一次 现在数组变成了[2, 1, 3, 4, 5];
第四次比较
拿1跟2比,发现1比2小.是倒序.就需要交换位置.那数组就变成[1, 2, 3, 4, 5];
到这里就全部比较完了,很显然能发现一个规律 如果比较一个长度为五的数组,需要比较四次,第一次比较四次,第二次比较三次,第三次比较两次,第四次比较一次
所以在内循环中需要减 i ,减1 是因为每次循环完后,上一次循环到最后面那个数不用比较了