как ускорить мой код? - PullRequest
0 голосов
/ 17 мая 2018

Я хочу написать код сегрегации битов, но мне интересно, что я могу сделать, чтобы увеличить скорость кода. Можно ли избавиться от некоторых петель и т. Д.?

Цель кода - разделить 1 и 0 массива. 0 должны быть слева, а 1 должны быть справа.

Вот мой код:

#include <stdio.h>

int main() {
    //code
    int testCase;
    scanf("%d\n", &testCase);

    while(testCase>0) {
        int n;
        scanf("%d\n", &n);
        int countzero = 0;
        while(n>0) {
            int i;
            scanf("%d ", &i);
            if(i==0){
                countzero++;
            }
        }
        for(int i=0; i<countzero; i++) {
            printf("0");
        }
        for(int i=countzero; i<n ; i++) {
            printf("1");
        }
        printf("\n");
    }
    return 0;
}

1 Ответ

0 голосов
/ 17 мая 2018

Интересно, что я могу сделать, чтобы увеличить скорость кода. Можно ли избавиться от некоторых петель и т. Д.?

Временная сложность каждого теста будет O (n) независимо от того, что вы делаете, так как вам нужно прочитать все числа, прежде чем вы узнаете, когда прекратите печатать нули.

Теперь, что касается ускорения, вы действительно можете удалить хотя бы одну петлю. Подсказка: вам не нужно считать сколько нулей, только сколько.

...