Что не так с моей рутинной сортировкой? - PullRequest
1 голос
/ 30 января 2012

Я пытаюсь реализовать нечетно-четную процедуру сортировки. Я думаю, что у меня есть основная идея, но что-то не так.

int odd = 1;
int even = 0;

do {
    for (odd; odd < size-1; odd += 2) {
        if (unsorted[odd] > unsorted[odd + 1])
            swap(&unsorted[odd], &unsorted[odd + 1]);
    }

    for (even; even < size-1; even += 2) {
        if (unsorted[even] > unsorted[even + 1])
            swap(&unsorted[even], &unsorted[even + 1]);
    }
} while (unsorted[odd] > unsorted[odd + 1] && unsorted[even] > unsorted[even +1]); 

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

Ответы [ 2 ]

1 голос
/ 30 января 2012

Я думаю, Дипак прав. Более того, я условие в while должно быть ложным после первого запуска

unsorted[odd] > unsorted[odd + 1] && unsorted[even] > unsorted[even +1]

оба должны быть ложными, когда вы пробегали циклы for, чтобы убедиться, что они не встречаются. Ваш массив никогда не посещается, чтобы в будущем вносить коррективы в значения в массиве.

0 голосов
/ 30 января 2012

Вы можете обратиться к примеру в вики, http://en.wikipedia.org/wiki/Odd%E2%80%93even_sort

Я думаю, что вы выходите сразу после первого цикла do-while, поскольку нечетные и четные уже> размера и могут быть неопределенными.

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