面试题-算法:乱序整数数组中将奇数放到左边,偶数放到右边

如题:实现要求,空间复杂度为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;
    }
}

你可能感兴趣的:(面试题-算法:乱序整数数组中将奇数放到左边,偶数放到右边)