A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

哈哈哈灬

初级黑马

  • 黑马币:12

  • 帖子:4

  • 精华:0

© 哈哈哈灬 初级黑马   /  2020-2-29 18:53  /  963 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

其实算法是一个很宽的概念,我们写的所有程序都可称之为算法,因为算法就是一个处理问题的逻辑,将问题进行归类,抽象出一个统一范式,然后为这个范式取个名字,比如:快速排序。
所以这里我们就来看下前端有哪些常用的算法。
递归

递归算法 : 英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。
递归的两个要素:
调用自身
能跳出循环
阶乘
n! = n*(n-1)...21
6! = 6 * 5 * 4 * 3 * 2 *1
规律:n的阶乘就是从n开始依次递减值的积
[JavaScript] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
function factorial(number){
  if(number==1) {
    return number;
  } else{
    return number*factorial(number-1);
  }
}
斐波那契数列
斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 求第n个数是多少
第一个数: 1
第二个数: 1
第三个数: 1+1
第三个数: 2+1+1
第四个数: 3+2+1+1
第五个数: 4+3+2+1+1
...
规律:后一项是前两项的和
[JavaScript] 纯文本查看 复制代码
?
1
2
3
4
5
6
function fibonacci(number) {
  if (number <= 2) {
    return 1;
  }
  return fibonacci(number-1) + fibonacci(number - 2)
}
排序算法
冒泡排序算法:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

比较流程
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
升顺排列 6 2 7 9 5
第一次冒泡: 2 6 7 9 5
第二次冒泡: 2 5 7 9 6
// 升序比较
[JavaScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
function bubbleSort(arr) {
  var nArr = arr.slice();
  var temp;
  if (nArr.length > 0) {
     for (var i = 0; i < nArr.length; i++){
        for (var l = i; l < (nArr.length - 1); l++){
            if (nArr[i] > nArr[l+1]) {            
              temp = nArr[i];
              nArr[i] = nArr[l+1];
              nArr[l+1] = temp;
            }
        }
     }
  }

  return nArr;
}
快速排序算法:快速排序是处理大数据集最快的排序算法之一。它是一种分而治之的算法,通过递归的方式将数据依次分解为包含较小元素和较大元素的不同子序列。该算法不断重复这个步骤直到所有数据都是有序的。

排序说明
第一步: 基准值选取。基准值可以任意选取
第二步: 进行分区操作。按照顺序将每个元素与基准进行比较,想成两个子集(大于基准值,小于基准值)
第三步,递归操作。对两个子集不断重复第一步和第二步,直到所有子集只剩下一个元素为止
[JavaScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
function qSort(arr) {
  if (arr.length == 0) {
      return [];
  }
  var left = [];
  var right = [];
  var pivot = arr[0];
  for (var i = 1; i < arr.length; i++) { // 注意这里的起始值,因为有一个作为flag了
      if (arr[i] < pivot) {
          left.push(arr[i]);
      } else {
          right.push(arr[i]);
      }
  }
  return qSort(left).concat(pivot, qSort(right));

6 个回复

倒序浏览
虚心使人进步,骄傲使人落后
回复 使用道具 举报
好运会眷顾那些已经做好充足准备的人
回复 使用道具 举报
一份耕耘一份收获,冲鸭!
回复 使用道具 举报
不忘初心,坚持
回复 使用道具 举报
预测未来最好的方法就是去创造未来。
回复 使用道具 举报
今天很残酷 明天更残酷 后天很美好,坚持:5_229:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马