Каковы преимущества `while (условие) {// работа}` и `do {// работа} в то время (условие)`? - PullRequest
0 голосов
/ 31 мая 2010

Я столкнулся с вопросом на собеседовании, цель которого состояла в том, чтобы написать алгоритм сортировки, который сортирует массив несортированных int значений:

int[] unsortedArray = { 9, 6, 3, 1, 5, 8, 4, 2, 7, 0 };

Теперь я погуглил и обнаружил, что существует так много алгоритмов сортировки ! Наконец, я мог мотивировать себя копаться в Bubble Sort , потому что это казалось довольно простым для начала.

Я прочитал пример кода и пришел к решению, похожему на это:

    static int[] BubbleSort(ref int[] array)
    {
        long lastItemLocation = array.Length - 1;
        int temp;
        bool swapped;

        do
        {
            swapped = false;
            for (int itemLocationCounter = 0; itemLocationCounter < lastItemLocation; itemLocationCounter++)
            {
                if (array[itemLocationCounter] > array[itemLocationCounter + 1])
                {
                    temp = array[itemLocationCounter];
                    array[itemLocationCounter] = array[itemLocationCounter + 1];
                    array[itemLocationCounter + 1] = temp;

                    swapped = true;
                }
            }

        } while (swapped);

        return array;
    }

Я ясно вижу, что это ситуация, когда оператор do { //work } while(cond) очень помогает и предотвращает использование другой вспомогательной переменной.

Но разве это единственный случай, когда это более полезно, или вам известно какое-либо другое приложение, в котором использовалось это условие?

Ответы [ 4 ]

11 голосов
/ 31 мая 2010

В целом:

  • используйте do...while, если хотите, чтобы тело было выполнено хотя бы один раз.
  • используйте while..., когда вы вообще не хотите, чтобы тело выполнялось.

РЕДАКТИРОВАТЬ: я бы сказал, первый вариант появляется примерно в 10% случаев, а второй около 90%. Вы всегда можете повторно использовать любой из этих факторов. Используйте тот, который ближе всего к тому, что вы хотите сказать.

5 голосов
/ 31 мая 2010

do ... while гарантирует, что тело кода внутри цикла будет выполнено хотя бы один раз. Это может быть полезно при определенных условиях; например, при кодировании цикла REPL.

1 голос
/ 31 мая 2010

Каждый раз, когда вам нужно пройтись по некоторому коду, пока не будет выполнено условие, это хороший пример того, когда использовать do ... while или while ...

Хороший пример того, когда использовать do ... while или while ..., это если у вас есть игра или симуляция, в которой игровой движок непрерывно запускает различные компоненты, пока не произойдет какое-то условие, такое как вы выигрываете или проигрываете.

Конечно, это только один пример.

0 голосов
/ 31 мая 2010

Вышеуказанные сообщения верны в отношении двух форм условного зацикливания. У некоторых языков есть повтор до формы вместо do while. Также есть минималистский взгляд, когда в языке должны существовать только необходимые управляющие структуры. В то время как делать это необходимо, но не делать. А что касается пузырьковой сортировки, вам следует избегать ее, поскольку это самый медленный из общеизвестных алгоритмов сортировки. Вместо этого посмотрите на сортировку выделения или вставку. Быстрая сортировка и сортировка слиянием бывают быстрыми, но их трудно написать без использования рекурсии, и они плохо работают, если вы выбрали плохое сводное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...