有一整型一维数组,要求在时间复杂度为O(N)的情况下,把小于零的数置于数组的前面,大于零的数放置于数组后面。
void holandflag_sort(int a[], int size)
{
int i, j, k;
i = 0;
j = 0;
k = size - 1;
while (j < k)
switch (a[j]) {
case RED:
swap(a, i, j);
i++;
j++;
break;
case WHITE:
j++;
break;
case BLUE:
swap(a, j, k);
k--;
break;
}
}
static inline void swap(int a[], int pa, int pb)
{
int tmp;
tmp = a[pa];
a[pa] = a[pb];
a[pb] = tmp;
}
本文介绍了一种在O(N)时间复杂度内解决荷兰国旗问题的算法实现,即在一维整型数组中将负数移至数组前端,正数移至后端的方法。通过使用三个指针i、j、k来遍历和交换数组元素,实现了高效的数据排序。
1487

被折叠的 条评论
为什么被折叠?



