「每周一题」前端工程师算法系列(1)-冒泡排序

210 阅读1分钟

算法的确实是硬伤,但是又不得不学,接下用JavaScript语言来分析常见的算法,力求通俗易懂,如果你觉得不错,或者发现文章中的错误,或者有更好的建议,欢迎提出

后续文章中会涉及:常见排序算法、常见搜索算法、树、分治法、动态规划、贪心算法等

冒泡排序

一:原理解析

通俗的说就是两个for循环嵌套,两两比较,如果第一个数比第二个数大,则交换位置,一轮下来后,最大的数字会“冒泡”到最后一位

重复执行代码,一轮一轮的比较,最后实现从小到大排序,或者是从大到小排序

二:实现方式

    var arr = [7, 8, 5, 3, 4, 2, 5, 8, 1]
    for(var i = 0; i < arr.length-1; i++){   // i是趟数
      for(var j = 0; j < arr.length-i-1; j++){  // j是比较次数,4趟则比较三次
        if(arr[j] > arr[j+1]){
          var temp = arr[j];
          arr[j] = arr[j+1]
          arr[j+1] = temp
        }
      }
    }
    console.log(arr);

三:效率测试

经过自己测试,发现时间复杂度(可以理解为排序的次数)计算: (n-1) + (n-2) + ... + 1 = n*(1 + (n-1))/2,所以时间复杂度为 O(n^2)

通俗的来说时间复杂度是看for循环嵌套,一层for循环即是O(n),两层O (n^2) 当然这仅仅是帮助小白快速记住,具体细节还需深入研究