我们有一个包含对象的数组,每个对象都有一个可以有3个值的属性。
现在我们需要使用线性O(n)算法和常量内存使用来对此数组进行排序。
我们怎么办呢?
类似于荷兰国旗算法吗?或者我们可以计算排序吗?如果我不对,那么我们还有什么方法可以继续?这个问题实际上是在接受采访时向我的一位朋友询问。
答案 0 :(得分:1)
这是数组元素问题的重新排列。荷兰国旗算法应该在这里做
void partition(int data[], int size, int low, int high) {
int p = -1;
int q = size;
for (int i = 0; i < q;) {
if (data[i] < low) {
swap(data[i], data[++p]);
++i;
} else if (data[i] >= high) {
swap(data[i], data[--q]);
} else {
++i;
}
}
}