2012-01-30 68 views
1

我想實現一個奇偶排序例程。我認爲我有中心思想,但有些不正確。我的奇偶排序程序有什麼問題?

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

您是否嘗試使用調試器(例如,如果在Linux上使用'gdb')來理解您的代碼在做什麼? – 2012-01-30 06:04:07

+3

修復您的縮進,首先 - 它使您的代碼變得非常多_much_難以閱讀(並且可能會隱藏錯誤!) – bdonlan 2012-01-30 06:04:33

回答

1

我認爲迪派克是正確的。此外,我在同時工作,應該是第一次運行後假

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

都應該是假的,你通過跑環,確保不會出現他們。您的數組永遠不會再次訪問,以便將來調整數組中的值。