2013-01-16 77 views
0

我正在編寫一個排序小數組的程序。這是一個班級任務,需要一個選擇排序,但我想要進一步超出要求。我之前做過選擇排序,我想嘗試實現雙向版本。它工作,除了一個問題。我的第二個結果總是第二個結果,並且從不排序。我覺得我錯過了一些小而愚蠢的東西。C++中的雙向選擇排序

下面是我的搜索功能代碼

void biSelSort(string engine[], double hits[]) {  
    int k = ARRAY_SIZE - 1; 
    for (int i = 0; i < k; i++) { 
     int min = i; 
     int max = i; 
     for (int j = i + 1; j <= k; j++) { 
      if (hits[j] < hits[min]) { 
       min = j; 
      } 
      if (hits[j] > hits[max]) { 
       max = j; 
      } 
     } 
     string tS = engine[min]; 
     double tD = hits[min]; 
     engine[min] = engine[i]; 
     hits[min] = hits[i]; 
     engine[i] = tS; 
     hits[i] = tD; 

     if (max == i) { 
      tS = engine[min]; 
      tD = hits[min]; 
      engine[min] = engine[k]; 
      hits[min] = hits[k]; 
      engine[k] = tS; 
      hits[k] = tD; 
     } else { 
      tS = engine[max]; 
      tD = hits[max]; 
      engine[max] = engine[k]; 
      hits[max] = hits[k]; 
      engine[k] = tS; 
      hits[k] = tD; 
     } 
     i++; 
     k--; 
    } 
} 
+1

你的第二個結果是你的第二個結果?這是有道理的,我猜... –

回答

4

你的意思是在遞增我兩次,一次是你的聲明,一旦你的循環結束?如果你這樣做,你真的應該修改你的代碼,所以你只能在一個地方做。

+0

哇。我知道這很愚蠢,但我不知道那是愚蠢的。我開始了一段時間的循環,然後當我第二天早上回頭看時切換到for循環。感謝代碼審查。 – gelliott181