Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 什么算法在线性时间内不使用额外空间对新值和重复值进行排序?_C_Arrays_Algorithm_Sorting - Fatal编程技术网

C 什么算法在线性时间内不使用额外空间对新值和重复值进行排序?

C 什么算法在线性时间内不使用额外空间对新值和重复值进行排序?,c,arrays,algorithm,sorting,C,Arrays,Algorithm,Sorting,[7,1,2,3,2,4,1,5,6] 什么算法在线性时间内不使用额外空间对新值和重复值进行排序 据我所知,计数排序对唯一值进行排序,而其他比较排序没有启用。你的问题不是很好,因为计数排序的问题不是它没有对重复值进行排序,而是对它们进行了很好的排序,这就是为什么它是计数排序而不是设置标记排序,但正如上面指出的,计数排序至少需要额外的Ok空间,其中k是数组中不同值的数目 但抛开这一点不谈。如果这些是有限大小的整数,例如32位整数,则可以使用,这是基数排序的一个就地变量。假设您想要最小数量的额外空间

[7,1,2,3,2,4,1,5,6]

什么算法在线性时间内不使用额外空间对新值和重复值进行排序


据我所知,计数排序对唯一值进行排序,而其他比较排序没有启用。

你的问题不是很好,因为计数排序的问题不是它没有对重复值进行排序,而是对它们进行了很好的排序,这就是为什么它是计数排序而不是设置标记排序,但正如上面指出的,计数排序至少需要额外的Ok空间,其中k是数组中不同值的数目

但抛开这一点不谈。如果这些是有限大小的整数,例如32位整数,则可以使用,这是基数排序的一个就地变量。假设您想要最小数量的额外空间,您会说没有额外空间,但这是不可能的,因为即使一个索引变量i构成额外空间,您也可以按如下方式进行:

首先,将小于0的元素划分为大于或等于0的元素之前的元素。除了使用&0x8000而不是%2之外,您可以使用与您相同的方法来执行此操作。 接下来,在第一个小于0的分区内,将小于0xC000的元素划分为大于或等于0xC000的元素之前的元素;在第二个大于或等于0的分区中,在大于或等于0x4000的元素之前对小于0x4000的元素进行分区。您可以使用与上一步相同的方法进行此操作,只是您还需要注意从一个分区转换到另一个分区的时间。 并且,对于每个后续位也是如此。
总的来说,如果这些是32位整数,则需要32次通过数组,因此它是O32n=On。

我不明白您要的是什么。在什么意义上不排序重复值?也许可以为您的示例发布预期结果?我读到计数排序使用值作为索引进行排序。这就是我猜的原因@如果你认为这是错误的,那么我将再次阅读计数排序。计数排序对这一点很好,因为它在最佳、平均和最坏情况下都有On+k时间。我还建议使用一个哈希表来计算数字的频率,然后对哈希表进行排序,然后用这些排序后的值替换数组。@RoadRunner前面提到的OP没有使用额外的空间。AFAIK计数排序确实使用额外的空间来构建哈希表。计数排序计算的是重复值。但正如巴本所说,它需要额外的存储来保存计数。