1. 排序

1.1.冒泡排序

  • 每一轮比较,从左至右交换相邻,每轮结束,最后一个为最大
  • 下一轮,需要比较的个数 - 1 j < len - i (范围动态缩小)
  • 共 len - 1 轮比较
function bubbleSort(arr) {var len = arr.length;for (var i = 1; i < len; i++) {for (var j = 0; j < len - i; j++) {if (arr[j] > arr[j+1]) {        //相邻元素两两对比var temp = arr[j+1];        //元素交换arr[j+1] = arr[j];arr[j] = temp;}}}return arr;
}

冒泡排序算法改进思想:

  • 个数较多的排序,(比如)从第6轮开始,数列已经有序,然而排序算法依然会执行第7、8轮直到结束:添加标志,一开始为1,只要有交换便置为0,在外层循环里添加if判断,if(标志为1) { break }
  • 当序列中某一段在比较之前就已经就是有序的:可以在每一轮排序的最后,记录下最后一次元素交换的位置,那个位置也就是无序数列的边界,再往后就是有序区了
  • 正反向冒泡排序
function bubbleSort(arr) {console.time('冒泡排序耗时')var len = arr.lengthvar lastChangeIndex = 0 // 初始,最后一次交换位置var sortBorder = len -1 // 初始有序边界为最后一值for (var i = 1; i < len; i++) {var isSorted = truefor (var j = 0; j < sortBorder; j++) {if (arr[j] > arr[j+1]) {        //相邻元素两两对比var temp = arr[j+1]        //元素交换arr[j+1] = arr[j]arr[j] = tempisSorted = falselastChangeIndex = j}}sortBorder = lastChangeIndexif(isSorted) {break}}console.timeEnd('冒泡排序耗时')return arr
}var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]
console.log(bubbleSort(arr))
function bubbleSort3(arr3) {var low = 0;var high= arr.length-1; //设置变量的初始值var tmp,j;console.time('2.改进后冒泡排序耗时');while (low < high) {for (j= low; j< high; ++j) //正向冒泡,找到最大者if (arr[j]> arr[j+1]) {tmp = arr[j]; arr[j]=arr[j+1];arr[j+1]=tmp;}--high;                 //修改high值, 前移一位for (j=high; j>low; --j) //反向冒泡,找到最小者if (arr[j]<arr[j-1]) {tmp = arr[j]; arr[j]=arr[j-1];arr[j-1]=tmp;}++low;                  //修改low值,后移一位}console.timeEnd('2.改进后冒泡排序耗时');return arr3;
}
var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
console.log(bubbleSort3(arr));//[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]

循序渐进的过程:
冒泡排序2次改进
JavaScript算法(含冒泡排序3次改进)

1.2. 选择排序

思想:

  • len-1 轮排序
  • 每轮排序,选出最小的数,放在最前的位置

1.3. 插入排序

思想: 打牌

1.4. 希尔排序

  • 确定一个增量
    -

1.5. 快速排序

  • 首先设定一个分界值,通过该分界值将数组分成左右两部分。
  • 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。
  • 然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
  • 重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

1.6. 随机排序

  • Math.random()得到的是0~1之间的随机数;
  • sort()可以调用一个函数做为参数,这个函数接收(a,b)两个参数,
    ① a<b返回-1 (小于0的值)
    ② a=b返回0,
    ③ a>b返回1(大于0的值),
    以这样的规则返回正负数的函数,排序结果为升序;
arr.sort((a, b) => a - b) // 升序排序
arr.sort((a, b) => b - a) // 降序排序
  • 让Math.random()随机出来的数与0.5做为一个比较,为正为负的几率各一半
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
arr.sort(function() {return Math.random() - 0.5;
})
console.log(arr);

2. 函数柯里化

详解JS函数柯里化

3. 技巧方法

  • 字符串倒序
str.split('').reverse().join('')
  • 斐波那契
function getFibo(i) {if (i == 0 || i == 1) {return 1} else {return arguments.callee(i-1) + arguments.callee(i-2)}
}
  • 数组最值
Math.max(...arr)
Math.min(...arr)

JavaScript算法相关相关推荐

  1. javascript 算法相关,如何利用指针特性求数组并集与交集

    如何利用指针特性求数组并集与交集 javascript计算数组交集,并集,网上有很多,有些书也有介绍, 很多都是写一个set类,再添加一些方法,本质上都是利用了多次循环 我在写这个的时候,也是被别人问 ...

  2. Javascript元素相关

    JavaScript元素相关 获取元素 根据标签id document.getElementById(); 根据标签名 document.getElementByTagName(); 返回的是获取过来 ...

  3. 自然语言处理技术(NLP)在推荐系统中的应用 原2017.06.29人工智能头条 作者: 张相於,58集团算法架构师,转转搜索推荐部负责人,负责搜索、推荐以及算法相关工作。多年来主要从事推荐系统以及机

    自然语言处理技术(NLP)在推荐系统中的应用 原2017.06.29人工智能头条 作者: 张相於,58集团算法架构师,转转搜索推荐部负责人,负责搜索.推荐以及算法相关工作.多年来主要从事推荐系统以及机 ...

  4. DL之GRU:GRU算法相关论文、建立过程(基于TF)、相关思路配图集合、TF代码实现

    DL之GRU:GRU算法相关论文.建立过程(基于TF).相关思路配图集合.TF代码实现 目录 GRU算法相关论文 GRU算法建立过程(基于TF) GRU算法的TF代码实现 GRU算法相关论文 GRU是 ...

  5. ML之GB:GB算法相关论文、相关思路、关键步骤、代码实现、配图集合、案例应用之详细攻略

    ML之GB:GB算法相关论文.相关思路.关键步骤.代码实现.配图集合.案例应用之详细攻略 目录 GB算法相关文献.论文 GB算法关键步骤 GB算法代码实现 GB案例应用 1.GB用于回归 2.GB用于 ...

  6. ML之Clustering之H-clustering:Hierarchical clustering算法相关论文、主要思路、关键步骤、代码实现等相关配图之详细攻略

    ML之Clustering之H-clustering:Hierarchical clustering算法相关论文.主要思路.关键步骤.代码实现等相关配图之详细攻略 目录 H-clustering算法相 ...

  7. CV之CycleGAN:CycleGAN算法相关思路配图、论文集合

    CV之CycleGAN:CycleGAN算法相关思路配图.论文集合 目录 CycleGAN算法相关思路配图 CycleGAN算法相关论文集合 改进的StarGAN CycleGAN算法相关思路配图 1 ...

  8. ML之HMM:HMM算法相关论文、关键步骤、测试代码配图集合

    ML之HMM:HMM算法相关论文.算法过程.关键步骤.测试代码配图集合 目录 HMM算法相关论文 HMM算法算法过程 HMM算法关键步骤 HMM算法测试代码 HMM算法相关论文 部分内容因为版本升级丢 ...

  9. ML之DR之SVD:SVD算法相关论文、算法过程、代码实现、案例应用之详细攻略

    ML之DR之SVD:SVD算法相关论文.算法过程.代码实现.案例应用之详细攻略 目录 SVD算法相关论文 SVD算法过程 1.公式的推导 2.SVD算法两步过程 SVD代码实现 SVD的案例应用 1. ...

最新文章

  1. 从“人脸”到“狗脸”,AI也要去宠物经济分杯羹?
  2. tensor_proto.raw_data().empty() || !tensor_proto.float_data().empty() || !tensor_proto.double_data()
  3. 【DIY】一个名叫“故事鸡”的儿童玩具是如何用树莓派3B+练成的
  4. 关于如何提高SQL Server Compact的查询性能
  5. P2597 [ZJOI2012]灾难(倍增LCA+拓扑排序)
  6. groovy lambda_Java Lambda流和Groovy Clouse的比较
  7. [Unity] AnimationEvent 因 Animator Controller 中 Transition 设置问题而不触发的快速解决办法:重新拖入 Animator 创建新 State
  8. 合并排序 非递归 java_合并排序-非递归
  9. 网易云音乐歌单解析易语言源码 附带成品软件
  10. win32com下载地址
  11. MinIO 快速入门
  12. 6、深思数盾加密狗使用小记
  13. 反转链表(图解,易懂)
  14. 数据治理:数据质量管理办法
  15. CSS 定位(position)
  16. mysql 三门课程平均分_平均分
  17. android平板刷成windows,安卓系统的平板电脑可以刷成windows系统吗?
  18. 蚁群算法Ant Colony Optimization-ACO
  19. 汉字从拼音到文字的完整映射表
  20. 6.数据中台 --- 数据开发:数据价值提炼工厂

热门文章

  1. 7-7 六度空间 (30分)_现役球员中,谁最可能成下一位30000分先生?3大前十巨星没戏...
  2. c mysql安装教程,Mysql安装教程_完成版(吐血式安装)
  3. opencv相机标定和人头姿态估计案例
  4. 2019春季学期第四周作业
  5. 在Winform中菜单动态添加“最近使用文件”
  6. console.dir有很多浏览器,系统的兼容性问题,不要随便用!
  7. mysql盲注学习-1
  8. 我与C++的不解情缘
  9. 设计模式基于C#的工程化实现及扩展
  10. Java学习笔记(4)——枚举类型