Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Algorithm 荷兰国旗问题(但使用两种颜色)_Algorithm_Sorting - Fatal编程技术网

Algorithm 荷兰国旗问题(但使用两种颜色)

Algorithm 荷兰国旗问题(但使用两种颜色),algorithm,sorting,Algorithm,Sorting,如果在一个数组中只有两种颜色需要排序:红色(在左边)和白色(在右边),那么下面的伪代码有逻辑意义吗 伪代码: 指针p&q,其中p指向第一个元素,q指向最后一个元素。p只能在数组中向右移动,q只能在数组中向左移动 while(p!=q){ 如果(p->颜色!=红色){ 交换[p,q]; q--; }否则{ p++; } } 是的,算法是正确的 交换只能在q处产生黄色值,并且只要不发生交换,q不会递减。因此,出现在q右侧的所有值必须为黄色 类似地,我们可以推断,如果没有发生交换,这意味着p处的值是红

如果在一个数组中只有两种颜色需要排序:红色(在左边)和白色(在右边),那么下面的伪代码有逻辑意义吗

伪代码: 指针p&q,其中p指向第一个元素,q指向最后一个元素。p只能在数组中向右移动,q只能在数组中向左移动

while(p!=q){
如果(p->颜色!=红色){
交换[p,q];
q--;
}否则{
p++;
}
}

是的,算法是正确的

交换只能在
q
处产生黄色值,并且只要不发生交换,
q
不会递减。因此,出现在
q
右侧的所有值必须为黄色

类似地,我们可以推断,如果没有发生交换,这意味着
p
处的值是红色的,只有在这种情况下,
p
才会增加。因此,出现在
p
左侧的所有值都保证为红色

这是循环不变量:
p
左侧的所有值均为红色,
q
右侧的所有值均为黄色


当循环退出时,除了循环不变量外,我们还知道
p==q
。有两种可能:该位置的值为红色或黄色。在这两种情况下,排序都是正确的。

是,算法是正确的

交换只能在
q
处产生黄色值,并且只要不发生交换,
q
不会递减。因此,出现在
q
右侧的所有值必须为黄色

类似地,我们可以推断,如果没有发生交换,这意味着
p
处的值是红色的,只有在这种情况下,
p
才会增加。因此,出现在
p
左侧的所有值都保证为红色

这是循环不变量:
p
左侧的所有值均为红色,
q
右侧的所有值均为黄色


当循环退出时,除了循环不变量外,我们还知道
p==q
。有两种可能:该位置的值为红色或黄色。无论哪种情况,排序都是正确的。

需要更多的上下文。完整的问题似乎很简单:它使用了一个数组。您的伪代码有点不清楚。
p
q
是否将索引[和/或指针]放入数组?指针p&q,其中p指向第一个元素,q指向最后一个元素。p只能在数组中向右移动,q只能在数组中向左移动。(编辑原文)这篇文章对你有帮助吗?在共享帖子中,数组包含数字
0
1
,而不是颜色
Red
White
。需要更多的上下文。完整的问题似乎很简单:它使用了一个数组。您的伪代码有点不清楚。
p
q
是否将索引[和/或指针]放入数组?指针p&q,其中p指向第一个元素,q指向最后一个元素。p只能在数组中向右移动,q只能在数组中向左移动。(编辑原文)这篇文章对你有帮助吗?在共享帖子中,数组包含数字
0
1
,而不是颜色
Red
White