js中的选择排序
在算法图解这本书中,介绍了选择排序,上面说到,选择排序是先遍历这个列表,找出最大值,将其添加到新的列表中,然后再依次找出第二大的值,继续加入新的列表,依次类推,最后得到的新列表就是排序后的列表。
但我在网页上搜索出来的用js实现的选择排序感觉跟上面说的那种思想有点不一样,具体体现在js实现的时候是通过交换位置而不是新建数组的方式,那从本质上来讲,这还属于选择排序吗?或者说是因为js的语言特征与Python有差异从而导致了实现上的不一样?有路过的大佬希望能帮忙解惑,感激不尽!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
啊这。。。那就先看看选择排序的定义吧
很明确的一点是选择排序就是从未排序的序列中依次选择最大/小的一个出来放到一个序列中,如此N此后就会得到一个排序好的序列,那么问题就在于这个被放入的序列是否需要新起一个?答案是可以是新的,也可以是旧的,从空间复杂度来说显然用利用已经分配好的内存空间是更优的选择,将选择出的元素依次从数组的头部开始放入,并将位置的元素交换回选择出的元素位置,这样从放入的位置开始往前是已排序的,往后都是未排序的,符合选择排序的算法定义,也充分复用了原有的内存空间。
重要的是理解算法的思路,不是具体的代码实现,python那个版本的代码还对数组pop了呢,pop操作是会更改数组长度的,每个元素的索引都发生了变化,跟js版本交换位置没啥区别,甚至js版本只是交换两个元素,而pop可指不定要移动多少个元素
看这书也就图一乐,建议去看算法四吧至少不会出现这种睿智的写法,先不说选择排序是不是一个原地排序的算法就他这在原数组上进行pop操作,本来就不快的n方算法,被他这么一操作更是雪上加霜变成2倍n方
javascript那个才是标准的写法