原理分析:
其原理是从头开始临近的数字两两进行比较,比较一轮战罢,最小的或者最大的被交换到第一位或者最后一位,
其余的再从头进行两两比较,直到比较大到倒数第一位,此轮战罢,最小的或者最大的排到了倒数第二位;。。依次类推递归
以我们数组[1,4,7,2,6,8,3,5,9]举例:
第一轮排序:两两比较之后将最小值放置最后一位
第一次:交换1|4比较前:1|4|7|2|6|8|3|5|9
比较后:4|1|7|2|6|8|3|5|9第二次:交换1|7
比较前:4|1|7|2|6|8|3|5|9比较后:4|7|1|2|6|8|3|5|9
第三次:交换1|2比较前:4|7|1|2|6|8|3|5|9
比较后:4|7|2|1|6|8|3|5|9
第四次:交换1|6
比较前:4|7|2|1|6|8|3|5|9比较后:4|7|2|6|1|8|3|5|9
第五次:交换1|8
比较前:4|7|2|6|1|8|3|5|9比较后:4|7|2|6|8|1|3|5|9
第六次:交换1|3比较前:4|7|2|6|8|1|3|5|9
比较后:4|7|2|6|8|3|1|5|9第七次:交换1|5
比较前:4|7|2|6|8|3|1|5|9比较后:4|7|2|6|8|3|5|1|9
第八次:交换1|9
比较前:4|7|2|6|8|3|5|1|9
比较后:4|7|2|6|8|3|5|9|1
第二轮比较:
将其余最小值放置倒数第二位:
第一次:交换4|7
比较前:4|7|2|6|8|3|5|9|1
比较后:7|4|2|6|8|3|5|9|1
第二次:4>2不进行交换
第三次:交换2|6
比较前:7|4|2|6|8|3|5|9|1
比较后:7|4|6|2|8|3|5|9|1
第四次:交换2|8
比较前:7|4|6|2|8|3|5|9|1
比较后:7|4|6|8|2|3|5|9|1
第五次:交换2|3
比较前:7|4|6|8|2|3|5|9|1
比较后:7|4|6|8|3|2|5|9|1
第六次:交换2|5
比较前:7|4|6|8|3|2|5|9|1
比较后:7|4|6|8|3|5|2|9|1
第七次:交换2|9
比较前:7|4|6|8|3|5|2|9|1
比较后:7|4|6|8|3|5|9|2|1
第三轮比较:
比较其余最小值放置倒数第三位:
第一次:7>4 不交换
第二次:交换4|6
比较前:7|4|6|8|3|5|9|2|1
比较后:7|6|4|8|3|5|9|2|1
第三次:交换4|8
比较前:7|6|4|8|3|5|9|2|1
比较后:7|6|8|4|3|5|9|2|1
第四次:4>3 不交换
第五次:交换3|5
比较前:7|6|8|4|3|5|9|2|1
比较后:7|6|8|4|5|3|9|2|1
第六次:交换3|9
比较前:7|6|8|4|5|3|9|2|1
比较后:7|6|8|4|5|9|3|2|1
第四轮比较:
比较其余最小值放置倒数第四位:
第一次:7>6 不交换
第二次:交换6|8
比较前:7|6|8|4|5|9|3|2|1
比较后:7|8|6|4|5|9|3|2|1
第三次:6>4 不交换
第四次:交换4|5
比较前:7|8|6|4|5|9|3|2|1
比较后:7|8|6|5|4|9|3|2|1
第五次:交换4|9
比较前:7|8|6|5|4|9|3|2|1
比较后:7|8|6|5|9|4|3|2|1
第五轮比较:
比较其余最小值放置倒数第五位:
第一次:交换7|8
比较前:7|8|6|5|9|4|3|2|1
比较后:8|7|6|5|9|4|3|2|1
第二次:7>6 不交换
第三次:6>5 不交换
第四次:交换5|9
比较前:8|7|6|5|9|4|3|2|1
比较后:8|7|6|9|5|4|3|2|1
第六轮比较:
比较其余最小值放置倒数第六位:
第一次:8>7 不交换
第二次:7>6 不交换
第三次:交换6|9
比较前:8|7|6|9|5|4|3|2|1
比较后:8|7|9|6|5|4|3|2|1
第七轮比较:
比较其余最小值放置倒数第七位:
第一次:8>7 不交换
第二次:交换7|9
比较前:8|7|9|6|5|4|3|2|1
比较后:8|9|7|6|5|4|3|2|1
第八轮比较:
比较其余最小值放置倒数第八位:
交换8|9
比较前:8|9|7|6|5|4|3|2|1
比较后:9|8|7|6|5|4|3|2|1
排序完毕,输出结果为[9,8,7,6,5,4,3,2,1];
js代码实现:
据此算法,我们不难写出对应的js排序算法:
如下:
var bubbleSort=function(arr){var sortOver=false;
for(var i=0;i<arr.length;i++){for(var j=0;j<arr.length-i;j++){
if(arr[j]<arr[j+1]){var temp=arr[j];
arr[j]=arr[j+1];arr[j+1]=temp;
sortOver=true;}
}if(!sortOver){break;}
}
return arr;
}
总结:
冒泡排序在各种排序算法中算是比较容易理解的一种排序方式,它通过一趟又一趟比较数组中每个元素使得较大数据下沉,较小数据上升,
正因为如此,冒泡排序是排序算法中排序比较慢的,属于O(n^2)算法在实际运用中效率比较低,如果数据量大,还有可能造成内存溢出,在各种排序算法发展中处于初级阶段
实际中应用不是特多,抛除效率问题,还是比较适合小数据量排序;