概念
针对数字数组的入门经典排序算法。其他排序算法比如快速排序、二分排序、插入排序等。流程
主要原理:整个冒泡排序过程分为多次的排序过程。每次排序过程都会将待排序中的最大值放在数组的末尾。
单次排序过程是从数组开头开始,依次进行相邻两个数的比较,将较大的数字位置进行交换,一直到数组末尾结束单次排序过程。
例子讲解
var arr = [36,26,27,2,4,19,50,48];
第一次排序过程:将50放在数组末尾
36和26比较 36>26 ,两者交换 [26,36,27,2,4,19,50,48];
36和27比较 36>27 ,两者交换 [26,27,36,2,4,19,50,48];
36和2比较 36>2 ,两者交换 [26,27,2,36,4,19,50,48];
36和4比较 36>4 ,两者交换 [26,27,2,4,36,19,50,48];
36和19比较 36>19 ,两者交换 [26,27,2,4,19,36,50,48];
36和50比较 36<50 ,两者不交换 [26,27,2,4,19,36,50,48];
50和48比较 50>48 ,两者交换 [26,27,2,4,19,36,48,50];
结束
第二次排序过程:将50放在数组末尾[26,27,2,4,19,36,48,50];
26和27比较 26<27 ,两者不交换 [26,27,2,4,19,36,48,50];
27和2比较 27>2 ,两者交换 [26,2,27,4,19,36,48,50];
27和4比较 27>4 ,两者交换 [26,2,4,27,19,36,48,50];
27和19比较 27>19 ,两者交换 [26,2,4,19,27,36,48,50];
27和19比较 27>19 ,两者交换 [26,2,4,19,27,36,48,50];
27和36比较 27<36 ,两者不交换 [26,2,4,19,27,36,48,50];
36和48比较 36<48 ,两者不交换 [26,2,4,19,27,36,48,50];
48和50比较 48<50 ,两者不交换 [26,2,4,19,27,36,48,50];
.。。
第length-1次排序后,就无需排序,因为就一个位置待排序。
var arr = [36,26,27,2,4,19,50,48];
//外层for:表示第几次排序过程
for(var i=1;i<=arr.length-1;i++) {
//第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;
}
}
}
console.log(arr);
var arr = [36,26,27,2,4,19,50,48];
//封装函数
function sortArray(array) {
for(var i=1;i<=array.length-1;i++) {
//第i次排序过程的详细排序
for(var j=0;j<array.length-i;j++) {
if(array[j]>array[j+1]) {
//两者交换
var temp = array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
return array;
}
arr = sortArray(arr);
console.log(arr);