算法的确实是硬伤,但是又不得不学,接下用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) 当然这仅仅是帮助小白快速记住,具体细节还需深入研究