刚学了排序,来一道排序题
void swap(int *a, int *b) {
int t = *a;
*a = *b, *b = t;
}
//定义一个函数来交换指针指向的两个值
void sortColors(int *nums, int numsSize) {
//划分三个区间,p0之前只有0,p2之后只有2
int p0 = 0, p2 = numsSize - 1;
//p0和p2分别置于首尾两端
for (int i = 0; i <= p2; i++) {
//当i不处于p2之后且该数为2时,将2交换至p2位置,在将p2向前移动一位
while (i <= p2 && nums[i] == 2) {
swap(&nums[i], &nums[p2]);
p2--;
}
//若i处数字为0,则于p0所指的数字交换,并将p0向后移动一位
if (nums[i] == 0) {
swap(&nums[i], &nums[p0]);
p0++;
}
}
}