我正在尝试实现奇偶排序程序。我认为我有一个中心思想,但有些不正确。
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循环数十万次,未排序的数组也永远不会被排序。任何人都有任何想法,我在这里出错?
答案 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;大小,可能是未定义的。