有没有时间复杂度替O(n)空间复杂度为1的排序算法
有没有时间复杂度为O(n)空间复杂度为1的排序算法?
这 是 一 个笔 试 题
------解决方案--------------------
在算法中所谓的时间复杂度为O(1)并不是说只使用一个空间,而是说在待处理的数据量变化的情况下使用的空间量是不变的。所以,桶排序是空间复杂度为O(1),时间复杂度为O(n)的算法。
------解决方案--------------------
不好意思,上面的开始的“时间复杂度”改成“空间复杂度”,笔误。完整的为“在算法中所谓的空间复杂度为O(1)并不是说只使用一个空间,而是说在待处理的数据量变化的情况下使用的空间量是不变的。所以,桶排序是空间复杂度为O(1),时间复杂度为O(n)的算法。”
------解决方案--------------------
桶排序的空间复杂度好像的确不是O(1),空间复杂度一般算的是辅助空间的大小,如果这个辅助空间的大小不随元素N变化那么就是O(1)。比如冒泡排序,需要的辅助空间是一个作交换用的临时变量,而且无论任何情况下都只要这一个,所以空间复杂度就是O(1)。但桶排序就不同了,他本身需要M个桶,桶的数量是人为决定的,然后需要N个结点,去装原本的N个元素,所以空间复杂度就是O(M+N),看下图:

------解决方案--------------------
这样做的话,时间复杂度难道不是与数据长度成正比吗?有一种桶排序的实现是这样的,先O(n)计算每个桶的大小,然后直接在原数组中定位M个指针交换数据。
这 是 一 个笔 试 题
------解决方案--------------------
在算法中所谓的时间复杂度为O(1)并不是说只使用一个空间,而是说在待处理的数据量变化的情况下使用的空间量是不变的。所以,桶排序是空间复杂度为O(1),时间复杂度为O(n)的算法。
------解决方案--------------------
不好意思,上面的开始的“时间复杂度”改成“空间复杂度”,笔误。完整的为“在算法中所谓的空间复杂度为O(1)并不是说只使用一个空间,而是说在待处理的数据量变化的情况下使用的空间量是不变的。所以,桶排序是空间复杂度为O(1),时间复杂度为O(n)的算法。”
------解决方案--------------------
桶排序的空间复杂度好像的确不是O(1),空间复杂度一般算的是辅助空间的大小,如果这个辅助空间的大小不随元素N变化那么就是O(1)。比如冒泡排序,需要的辅助空间是一个作交换用的临时变量,而且无论任何情况下都只要这一个,所以空间复杂度就是O(1)。但桶排序就不同了,他本身需要M个桶,桶的数量是人为决定的,然后需要N个结点,去装原本的N个元素,所以空间复杂度就是O(M+N),看下图:
------解决方案--------------------
这样做的话,时间复杂度难道不是与数据长度成正比吗?有一种桶排序的实现是这样的,先O(n)计算每个桶的大小,然后直接在原数组中定位M个指针交换数据。