我奇怪的排序程序有什么问题?

时间:2012-01-30 05:59:39

标签: c sorting

我正在尝试实现奇偶排序程序。我认为我有一个中心思想,但有些不正确。

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 个答案:

答案 0 :(得分:1)

我认为迪帕克是对的。而且,我在第一次运行后的条件应该是假的

unsorted[odd] > unsorted[odd + 1] && unsorted[even] > unsorted[even +1]
当你通过for循环确保它们不会发生时,

都应该是假的。永远不会再访问您的数组,以便将来调整数组中的值。

答案 1 :(得分:0)

您可以参考wiki中的示例http://en.wikipedia.org/wiki/Odd%E2%80%93even_sort

我认为你出现在第一个do-while循环之后,因为奇数&amp;甚至已经是&gt;大小,可能是未定义的。