Algorithm 对二值列表排序

Algorithm 对二值列表排序,algorithm,list,sorting,binary,Algorithm,List,Sorting,Binary,如果我有一个只包含0和1的二进制值的列表,如下面的000111010110 我想把它排序为以下000000111111,如果你也知道列表的大小,那么最有效的方法是什么?现在我正在考虑使用一个计数器,在从头到尾遍历列表时,我只需计算0的数量。然后,如果我将列表大小除以numberofzero,我得到numberofone。然后我想,我不需要重新排序从零开始的列表,而是创建一个新的列表。您是否同意这是最有效的方法?您的算法实现了经典算法的最原始版本(其实现)。当数字的范围已知且(相对)较小时,这是对

如果我有一个只包含0和1的二进制值的列表,如下面的000111010110
我想把它排序为以下000000111111,如果你也知道列表的大小,那么最有效的方法是什么?现在我正在考虑使用一个计数器,在从头到尾遍历列表时,我只需计算0的数量。然后,如果我将列表大小除以numberofzero,我得到numberofone。然后我想,我不需要重新排序从零开始的列表,而是创建一个新的列表。您是否同意这是最有效的方法?

您的算法实现了经典算法的最原始版本(其实现)。当数字的范围已知且(相对)较小时,这是对数字进行排序的最快方法。由于您只有0和1,因此不需要桶排序中存在的计数器数组:一个计数器就足够了。

您的算法实现了经典算法的最原始版本(其实现)。当数字的范围已知且(相对)较小时,这是对数字进行排序的最快方法。因为只有0和1,所以不需要存储桶排序中存在的计数器数组:一个计数器就足够了。

如果有数值,可以使用汇编指令bitscan(x86 assembly中的BSF)来计算位数。要创建“排序”值,可以设置n+1位,然后减去1。这将把所有位设置在n+1位的右边。

如果您有数值,您可以使用汇编指令bitscan(x86汇编中的BSF)来计算位数。要创建“排序”值,可以设置n+1位,然后减去1。这将把所有位设置在n+1位的右边。

桶排序似乎是一种排序算法

我认为不需要这样的操作,因为我们知道没有比N*logN更快的排序算法。因此,默认情况下,这是错误的

所有这一切都是因为你所要做的就是你在一开始所说的。只需遍历列表,计算出0或1的复杂度,然后创建一个新数组,在开始时计算出0,然后是1。这样,你就得到了n+n的复杂度 O(n)复杂性


这仅仅是因为你只有两个值。所以快速排序或任何其他排序都不能更快。没有比NLog(n)更快的排序了。

桶式排序似乎是一种排序算法

我认为不需要这样的操作,因为我们知道没有比N*logN更快的排序算法。因此,默认情况下,这是错误的

所有这一切都是因为你所要做的就是你在一开始所说的。只需遍历列表,计算出0或1的复杂度,然后创建一个新数组,在开始时计算出0,然后是1。这样,你就得到了n+n的复杂度 O(n)复杂性


这只是因为您只有两个值。因此,快速排序或任何其他排序都不能更快地完成此操作。没有比NLog(n)

BSF找到第一个位集的索引更快的排序了。它不计算设置的位数。BSF查找第一个位集的索引。它不计算设置的位数。如果您使用的是计算机字中的位数,请参阅的计数位数集部分。如果您使用的是计算机字中的位数,请参阅的计数位数集部分。