我想在一次迭代中对布尔数组进行排序。我正在尝试从C++做到这一点。我尝试通过初始化一个新数组,然后将False值附加到数组的结尾并将真值添加到数组的起始位置来实现此目的。但我正在努力如何追加数据而不用C++覆盖。有没有更好的算法来做到这一点,请赐教。如何在数组的一次迭代中对布尔数组进行排序(遍历数组只遍历一次)?
回答
我会用两个指针扫描数组:一个从头开始,另一个从结束。当每个指针走向数组的中间时,检查这些值是否无序,如果是,交换它们。指针相遇的时间/地点的值是按顺序排列的。
请注意,与交换大多数其他类型的值不同,在这种情况下,不需要在复制值时进行典型交换。让我们暂时假设你正在排序,所以所有的true
值都是第一位的,而所有的false
值都是第二位。在这种情况下,如果您必须按顺序排列值,则它只能是之前出现的true
,当它们交换时,它只能是在false
之前出现的true
。您只需在左侧寻找false
,而在右侧寻找true
,而您找到它们时,则需要在左侧分配true
,在右侧分配false
。
如果你想在一个单独的数组输出,你可以采取一个更简单的方法:从头到尾遍历输入数组。对于每个true
,您会发现,将输出数组中的下一个值设置为true
并前进到下一个位置。当你到达输入数组的结尾,在输出值的其余部分设置为false:
// ...
for (bool *b = input; b != input_end; ++b)
if (*b)
*out++ = true;
while (out != output_end)
*out++ = false;
这是假设你想true
false
之前排序。如果您想反转,请将if (*b)
改为和*out++ = false
改为*out++ = true;
。
它工作正确吗?这是一个布尔数组。那里只有trues和falsies。 –
@TharinduRameshKetipearachchi:这正是*为什么它能正常工作(即为什么一次传球就足够了)。 –
现在我明白了。非常感谢你。 –
如果您在就地排序布尔值数组,您需要做的就是遍历数组,并使用数组末尾的值替换您看到的任何错误值(使用递减计数器)(或换掉真正的价值,如果在你的定义true后出现错误)。
void function sort(const bool *array, int n) {
int i = 0, j = n - 1;
while(i <= j) {
if(array[i] == false) {
bool temp = array[i];
array[i] = array[j];
array[j] = temp;
--j;
} else {
++i;
}
}
}
这是完美的工作。谢谢。 –
或算了算trues与trues覆盖阵列*计数和falses * - 根据您的排序顺序
这是最好的答案。谢谢。 –
@TharinduRameshKetipearachchi这将导致更多的迭代...一个用于计数和一个用于(重新)初始化... –
计数真/假值的数量总是这样的伎俩上(尺寸数)。像这样的东西。
int main()
{
int a[]={1,0,1,1,0,1,1,0,1,0,0,1,0};
int size=sizeof(a)/4,count1=0,i;
for(i=0;i<size;i++)
if(a[i]==1)
count1++;
for(i=0;i<size;i++)
{
if(i<count1)
a[i]=1;
else
a[i]=0;
printf("%d ",a[i]);
}
return 0;
}
- 1. 如何循环遍历一个函数一组次数?
- 2. 遍历数组
- 3. 遍历数组
- 4. 遍历数组
- 5. 遍历数组的排列
- 6. 遍历3D数组的迭代方法
- 7. 遍历一个BPEL数组
- 8. .filter遍历一个数组
- 9. PHP可迭代到数组或遍历
- 10. Clojure进入数组遍历数组
- 11. 遍历对象的数组
- 12. itertools.groupby:迭代遍历组pairwise
- 13. 如何遍历数组数组
- 14. php数组遍历
- 15. typoscript - 遍历数组?
- 16. 遍历数组树?
- 17. jquery遍历数组
- 18. 如何遍历JSON数组?
- 19. 如何遍历char数组
- 20. Laravel:遍历对象数组
- 21. javascript遍历对象数组
- 22. 在javascript中遍历数组?
- 23. 在scala中的一次迭代中实现遍历函数
- 24. 循环遍历一个数组并且目标第一次迭代
- 25. C中的数组遍历#
- 26. 遍历数组,显示一年一次,个月后
- 27. 遍历一个PHP数组比遍历MySQLi关联数组更好吗?
- 28. 遍历数组数组的所有值
- 29. 遍历数组,输出中进div的
- 30. 遍历numpy多维数组的一列?
您是否需要在原地进行排序? – mooiamaduck
我想返回排序的数组。 –