如题:实现要求,空间复杂度为o(1).
如果没有这个要求的话,这个题目相信很多人都会手到擒来。
思路:既然空间复杂度为o(1),那就得充分利用数组自己的空间,在数组内部进行元素的交换来达到目的,思路与快速排序类似,从左边找到偶数,再从右边找到奇数,进行交换,直到左右相遇。
上代码:
void sort(int nums[], int count) {
if (count == 0) {
return;
}
int s = 0, e = count - 1;
while (s < e) {
while (nums[s] % 2 != 0 && s < e) {
s ++;
}
while (nums[e] % 2 == 0 && s < e) {
e --;
}
if (s == e) {
return;
}
int tem = nums[s];
nums[s] = nums[e];
nums[e] = tem;
}
}