荷兰国旗问题
- 简化版荷兰国旗问题
给定一个数组arr,和一个数num,请把小于等于num的数放在数组的左边,大于num的数放在数组的右边。要求额外空间复杂度O(1),时间复杂度O(N)。
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void process(int *a[], int num)
{
int i = 0;
int p1 = -1;
while (i < 8)
{
if (a[i] <= num)
{
swap(&a[i], &a[p1 + 1]);
i++;
p1++;
}
else
i++;
}
}
int main()
{
int a[8] = {3, 5, 6, 7, 4, 3, 5, 8};
int num = 5;
process(&a, num);
for (int i = 0; i < 8; i++)
printf("%d", a[i]);
return 0;
}
这里举的例子是3,5,6,7,4,3,5,8
左 | 中 | 右 |
---|---|---|
<=num | >num | 待定 |
这相当