冒泡排序是一种简单的排序算法,它也是一种稳定的排序算法。其原理是重复扫描待排序序列,并比较每一对相邻的元素,当该元素排序不正确时进行交换,一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序

    一般情况下,称某个排序算法稳定,指的是当待排序序列中有相同的元素时,它们的相对位置在排序前后不会发生改变。

    下面我们就以arr = [8,7,6,5,4,3,2,1,9]来进行降序排列,使用冒泡的方式
    在sort函数中第一个for循环循环第一次时
    8 >7 换位 此时[7,8,6,5,4,3,2,1,9]
    8 > 6换位 此时[7,6,8,5,4,3,2,1,9]
    8 > 5换位 此时[7,6,5,8,4,3,2,1,9]
    8 > 4换位 此时[7,6,5,4,8,3,2,1,9]
    8 > 3换位 此时[7,6,5,4,3,8,2,1,9]
    8 > 2换位 此时[7,6,5,4,3,2,8,1,9]
    8 > 1换位 此时[7,6,5,4,3,2,1,8,9]
    8 < 9不换位 此时依然是 [7,6,5,4,3,2,1,8,9]
    从第一次循环中我们得到 第一次循环的最高值 9
    同理可得:
    从第二次循环中我们得到 第一次循环的最高值 8
    从第一次循环中我们得到 第一次循环的最高值 7
    同理可得
    我们最终可以实现这个数组的从小到大排序 [1, 2, 3, 4, 5,6, 7, 8, 9]
    由此我们也可以看出此算法的时间复杂度是O(n2)

    1. var arr = [8,7,6,5,4,3,2,1,9]
    2. // 排序的本质是比较和交换
    3. function exchange(a,b){//交换
    4. var tem = arr[a];
    5. arr[a] = arr[b];
    6. arr[b] = tem;
    7. }
    8. function sort(arr){//排序
    9. for(i = 0; i < arr.length; i++) {
    10. for(j = 0; j < arr.length - 1 - i; j++ ){
    11. if(arr[j] > arr[j+1]){
    12. exchange(j, j + 1)
    13. }
    14. }
    15. }
    16. }
    17. sort(arr)
    18. console.log(arr) //[1, 2, 3, 4, 5,6, 7, 8, 9]