Почему не принили такое решение?
private boolean compressRow(int[] row) {
    boolean flag = false;
    for (int i = 0; i < row.length; i++) {
        if (row[i] == 0) {
            for (int j = row[i]; j < row.length; j++) {
                if (row[j] > 0) {
                    if (j != 0) {
                        int temp = row[j - 1];
                        row[j - 1] = row[j];
                        row[j] = temp;
                        flag = true;
                    }
                }
            }
        }
    }
    return flag;
}