有没有时间复杂度替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)空间复杂度为1的排序算法
------解决方案--------------------
引用:
一般来说对超过基本类型表示的大数或字符串排序,使用基数排序比较好。桶排序适用于基于整形的数值排序(对字符串非要用桶排序的话,需要将字符串使用某种方式转换成整形数值)。对于桶排序,当M = 10,N = 10时我可以排序,N = 100时也可以排序,只是时间复杂度会增加,略大于O(n),但是空间复杂度还是O(1)。不知道我这样理解是否正确,请指正。
这样做的话,时间复杂度难道不是与数据长度成正比吗?
引用:
桶排序的空间复杂度好像的确不是O(1),空间复杂度一般算的是辅助空间的大小,如果这个辅助空间的大小不随元素N变化那么就是O(1)。比如冒泡排序,需要的辅助空间是一个作交换用的临时变量,而且无论任何情况下都只要这一个,所以空间复杂度就是O(1)。但桶排序就不同了,他本身需要M个桶,桶的数量是人为决定的,然后需要N个结点,去装原本的N个元素,所以空间复杂度就是O(M+N),看下图:
有没有时间复杂度替O(n)空间复杂度为1的排序算法
有一种桶排序的实现是这样的,先O(n)计算每个桶的大小,然后直接在原数组中定位M个指针交换数据。