- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
目 录
交换两个变量
排序算法
冒泡排序
选择排序
插入排序
希尔排序
快速排序
数组去重
寻找最大值和最小值
找出数组中两数之和等于目标值的下标索引组成的数组
本文档使用 看云 构建 - 2 -
交换两个变量
交换两个变量
这篇文章总结了七种办法来交换两个变量值
let a 12
let b 34
方法1 :临时变量法(非常low的方法)
let temp
temp a
a b
b temp
最最最简单的办法就是使用一个临时变量了 ,不过使用临时变量的方法实在是太low了
首先把a的值存储到临时变量中 ,然后b赋值给a ,最后拿出临时变量中的a值赋给b ,这个办法是最基本的
了。
方法2
下面的方案都不会有临时变量 ,我总结了一下 ,其实不使用临时变量的思路都是让其中一个变量变成一个
a和b都有关系的值 ,这样可以先改变另一个变量值 , 最后改变原修改的变量值。
比如这个
a + b
b a - b
a - b
让a先变成a与b的 ‘和 (也可以换成a和b的差 ,一样的 ) , ‘和减去b巧妙的得到了a的变量值赋予b ,
再通过 ‘和减去a的值得到了b的值赋予a ,或者是下面的变式 (差的形式 )
a - b
b a + b
a b - a
但是感觉和的形式更容易理解
方法3
这种方法对于第一次学习JavaScript的同学来说可能不了解 ,因为我们JavaScript很少会用到位操作 ,这
本文档使用 看云 构建 - 3 -
交换两个变量
是我在以前看算法竞赛书的时候学来的 ,通过底层位运算来进行交换变量值 ,也是上面的方案演化来的
a ^ b
b ^ a
a ^ b
了解一下吧 ,C++甚至可以 a^ b^ a^ b 来完成任务 ,但我发现JavaScript不可以
不过我们可以这样
a (b^ a^ b)^a
方法4
把a先变成了一个对象 ,这个对象保存着应该交换后的键值对 ,最后赋值搞定
a {
a: b,
b: a
}
b a.b
a a.a
方法5
和上面的方法很像 ,只不过对象换成了数组
a [a, b]
b a[0]
a a[1]
方法6
这个办法十分的巧妙 ,不是我想出来的 ,想出来的人一定是大神 ,除非他是托梦想出来的 ,简单粗暴一行
代码交换了a和b的变量值
a [b, b a][0]
根据运算符优先级 ,首先执行 b a ,此时的b直接得到了a的变量值 ,然后一步数组索引让a得到了b的
值 (简直不能再厉害 )
方法7
本文档使用 看云 构建 - 4 -
交换两个变量
最后我的方案是利用了ES6的解构赋值语法 ,它允许我们提取数组和对象的值 ,对变量进行赋值 ,不过我
现在测试用的chrome浏览器已经实现了
[a, b] [b, a]
可以看到解构赋值语法让我们的交换变量值变得超级简单 ,这个解构赋值语法要是讲的话要讲很多不是今
天的重点 ,以后会在再总结现在就不讲了
本文档使用 看云 构建 - 5 -
排序算法
排序算法
评判一个算法的维度
1. 时间复杂度
时间复杂度指的是一个算法执行所耗费的时间
2. 空间复杂度
空间复杂度是指运行完一个程序所需内存的大小
3. 稳定性
稳定 :如果a=b ,a在b的前面 ,排序后a仍然在b的前面
不稳定 :如果a=b ,a在b的前面 ,排序后可能会交换位置
本文档使用 看云 构建
原创力文档


文档评论(0)