因为数组中最小值会像冒泡泡一样,从数组中慢慢一个一个浮现到数组的最后,所以称为冒泡排序。
1:冒泡算法的原理:冒泡算法把数组中的每个值从前向后进行比较,每次循环会将当前数值与后一个数值进行比较,如果符合条件, 会进行数值互换,多次循环以此来达到重新排序的目的。
2:冒泡算法的代码构成和每一步所代表的意义:
function funct(arrr){
for(var i = 0;i < arrr.length; i++){
for(var j = 0; j < arrr.length -1 -i;j++){
if(arrr[j] < arrr[j+1]){
var num = arrr[j];
arrr[j] = arrr[j+1] ;
arrr[j+1] = num ;
}
}
}
return arrr
}
首先需要一个for循环来循环数组中的每一项数值,之后再嵌套一个for循环 用来比较数组中的数值,并进行重新赋值并排序。这里有一个难点,就是j < arrr.length - 1,之所以小于arrr.lrngth-1 是因为比较大小时需要与后一项比较,如果j < length的话 这个循环的最后一项的返回值会返回undefind,这会改变原数组的内容,所以需要-1。
之后是if判断来比较前后数值的大小,这个地方是这个算法最难理解的地方。
if(arrr[j] < arrr[j+1]){ 这里会判断 数组[j]下标所对应值是否小于下一个数值
var num = arrr[j] 如果通过判断,则声明一个名抓取较小的一项的数值
arrr[j] = arrr[j+1] 将较小数值所对应的下标位置重新赋值为较大的数值
arrr[j+1] = num 将较大数值所对应的下标位置重新赋值为之前声明抓取的较小数值以此来实现位置互换
每一次i循环后都会确定一个数组中最小值放在数组的最后 所以 j < length -1 再减去i,以此来减少函数所占用的内存和计算时间。
最后在循环外, 将重新赋值后的数组arrr返回,最后达到重新排序的目的。