js中的选择排序

在算法图解这本书中,介绍了选择排序,上面说到,选择排序是先遍历这个列表,找出最大值,将其添加到新的列表中,然后再依次找出第二大的值,继续加入新的列表,依次类推,最后得到的新列表就是排序后的列表。

但我在网页上搜索出来的用js实现的选择排序感觉跟上面说的那种思想有点不一样,具体体现在js实现的时候是通过交换位置而不是新建数组的方式,那从本质上来讲,这还属于选择排序吗?或者说是因为js的语言特征与Python有差异从而导致了实现上的不一样?有路过的大佬希望能帮忙解惑,感激不尽!
js中的选择排序

阅读 1.9k
2 个回答

啊这。。。那就先看看选择排序的定义吧

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。——百度

很明确的一点是选择排序就是从未排序的序列中依次选择最大/小的一个出来放到一个序列中,如此N此后就会得到一个排序好的序列,那么问题就在于这个被放入的序列是否需要新起一个?答案是可以是新的,也可以是旧的,从空间复杂度来说显然用利用已经分配好的内存空间是更优的选择,将选择出的元素依次从数组的头部开始放入,并将位置的元素交换回选择出的元素位置,这样从放入的位置开始往前是已排序的,往后都是未排序的,符合选择排序的算法定义,也充分复用了原有的内存空间。
重要的是理解算法的思路,不是具体的代码实现,python那个版本的代码还对数组pop了呢,pop操作是会更改数组长度的,每个元素的索引都发生了变化,跟js版本交换位置没啥区别,甚至js版本只是交换两个元素,而pop可指不定要移动多少个元素

看这书也就图一乐,建议去看算法四吧至少不会出现这种睿智的写法,先不说选择排序是不是一个原地排序的算法就他这在原数组上进行pop操作,本来就不快的n方算法,被他这么一操作更是雪上加霜变成2倍n方
javascript那个才是标准的写法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题