2015-10-01 42 views
2

我的排序函數似乎只重複列出了3個數字。不知道爲什麼。有任何想法嗎?排序函數helpers.c只列出幾個數字

我的排序陣列從這裏開始。我創建了一個循環遍歷n個數字。然後我比較這些值並創建一個交換算法。我假設我的交換算法有缺陷。

/** 
* Sorts array of n values. 
*/ 
void sort(int values[], int n) 
{   
    //TODO: implement an O(n^2) sorting algorithm 
    for (int i = 0; i < n - 1; i++) 
    { 
     if (values[i] < values[i + 1]) 
     {   
      int holder = values[i]; 
      values[i] = holder; 
      values[i + 1] = values[i]; 
      values[i] = holder; 
      printf("%i\n", values[i]);     
     }  
    }  
    return;   
} 
+0

難道你不會對許多人做'價值觀'持有者嗎?如果你學會了使用調試器,以及如何逐行瀏覽代碼,這樣的問題很容易找到。無論如何,學習如何使用調試器可能是一個好主意,因爲你的'sort'函數不能完全排序數組。 –

+0

順便說一句,如果你有排序問題,爲什麼你告訴我們無關的搜索功能?你可能想[閱讀如何提出好問題](http://stackoverflow.com/help/how-to-ask),並學習如何創建[最小,完整和可驗證示例](http:///stackoverflow.com/help/mcve)。 –

+0

我在這裏新。謝謝 – SomeKindaAlien

回答

0

中有如下的邏輯錯誤:

int holder = values[i]; 
    values[i] = holder; 
    values[i + 1] = values[i]; 
    values[i] = holder; 

我假設你想交換的values[i]values[i+1]值。

您還沒有該代碼將其分配到任何地方values[i]提取values[i+1]值。

您需要使用:

int holder = values[i]; 
    values[i] = values[i + 1]; 
    values[i + 1] = holder; 
+0

感謝您的幫助。儘管我似乎仍然在獲取未分類數字的列表。 – SomeKindaAlien

+0

這是因爲你的排序算法不完整。您可以在Wikipedia中查找各種排序算法,並實現最簡單的排序算法 - [冒泡排序](https://en.wikipedia.org/wiki/Bubble_sort)。 –

+0

會做謝謝! – SomeKindaAlien

0

發生這種情況,因爲你不是那種正確地實現泡沫。做到像如下 -

/** 
* Sorts array of n values. 
*/ 
void sort(int values[], int n) 
{   
    //TODO: implement an O(n^2) sorting algorithm 
    for (int i = 0; i < n - 1; i++) 
    { 
     for(int j=0;j<n-i-1;j++) 
     { 
     if (values[j+1] < values[j]) 
     {   
      int holder = values[j]; 
      values[j] = values[j + 1] 
      values[j + 1] = holder; 

      printf("%i\n", values[j]);     
     } 
     }  
    }  
    return;   
} 

在你的算法你遍歷數組只有一次(因爲只是一個for循環),而排序才能正常工作,你需要有兩個嵌套循環。