2015-10-19 46 views
2

我試圖在維基百科實現梳狀排序的僞代碼,但它似乎排序我給它的樣本數組。有小費嗎?梳狀排序實現不準確排序,C++

void combSort(int* list, int length) 
{ 
bool swapper; 
int gap = length; 
double shrink = 1.25; 
int temp; 
do{ 
    gap = (int) gap/shrink; 
    if (gap < 1) 
     gap = 1; 

    swapper = false; 
    for (int i=0;(i+gap)<length;i++){ 
     if (list[i] > list[i+gap]){ 
      swap(list[i],list[i+gap]); 
      swapper = true; 
     } 
    } 
} 
while ((gap > 1) && (swapper == true)); 
} 
+0

如果你打算使用C++,爲什麼不在這裏使用標準庫容器,如'std :: array'或'std :: vector'?你在這裏基本上是C代碼。 – tadman

+0

如果是C,交換功能可能不起作用。你需要通過引用傳遞,而不是價值。 – AShelly

回答

3

根據wikipedia文檔,您應該更改最後一個謂詞。 有效的解決方案:

void combSort(int* list, int length) 
{ 
    bool swapper; 
    int gap = length; 
    double shrink = 1.25; 
    int temp; 
    do { 
     gap = (int)gap/shrink; 
     if (gap < 1) 
      gap = 1; 

     swapper = false; 
     for (int i = 0; (i + gap)<length; i++) { 
      if (list[i] > list[i + gap]) { 
       swap(list[i], list[i + gap]); 
       swapper = true; 
      } 
     } 
    } while ((gap > 1) || (swapper == true)); 
} 

更改的行:而((間隙> 1)||(交換技術== TRUE));

+0

謝謝。縱觀維基,我並不是很明顯地認爲,這兩種情況都是錯誤的,因爲離開循環的要求需要「或」而不是「和」。 –