905. Sort Array By Parity

使一个数组偶数在前,奇数在后。 首先使用while找到第一个奇数和第一个偶数出现的位置,然后进行交换。

public int[] sortArrayByParity(int[] A) {
    int l = 0, r = A.length - 1;
    while (l < r) {
        while (l < r && (A[l] & 1) == 0) l++; // even++
        while (l < r && (A[r] & 1) == 1) r--; // odd--

        int tmp = A[l];  //swap
        A[l] = A[r];
        A[r] = tmp;
    }
    return A;
}

写成单独的函数:

public int[] sortArrayByParity(int[] A) {
    int l = 0, r = A.length - 1;
    while (l < r) {
        while (l < r && isEven(A[l])) l++;
        while (l < r && !isEven(A[r])) r--;

        int tmp = A[l];
        A[l] = A[r];
        A[r] = tmp;
    }
    return A;
}

public boolean isEven(int n) {
    return (n & 1) == 0;
}

保持奇偶的顺序,用插入排序

for (int i = 1; i < array.length; i++) {
    int key = array[i];
    if (!isEven(key)) { // 如果第一个数是奇数,需要将它排在前面
        int j = i;
        while (j > 0 && isEven(array[j - 1])) { // 没有越界且它的前面是偶数
            array[j] = array[j - 1];
            j--;
        }
        array[j] = key;
    }
}

public boolean isEven(int n) {
    return (n & 1) == 0;
}

results matching ""

    No results matching ""