2016-04-16 88 views
0

請看看這段代碼。它應該按照非遞減順序排序,但由於某種原因,它會首先放置最大的元素,然後按正確的順序放置其餘的元素。Sorting C++,First element not working

int min(int start) 
    { 
     int minimum = list[start]; 
     int location = 0; 
     for (int i = start; i < size; i++) 
     { 
      if (list[i] < minimum) 
      { 
       minimum = list[i]; 
       location = i; 
      } 
     } 
     return location; 
    } 

    void sort() 
    { 

     int minimum; 
     for (int i = 0; i < size; i++) 
     { 
      minimum = min(i); 
      int temp = list[i]; 
      list[i] = list[minimum]; 
      list[minimum] = temp; 
     } 

    } 
+0

那麼,您是否在調試器中逐步完成代碼? – OldProgrammer

+0

是的,我已經試過了一切,它不會工作,我即將去瘋狂大聲笑 – user6204551

+0

你能分享整個計劃,包括主要部分 – g4ur4v

回答

0
int location = 0; 

初始化位置爲0,如果list[start]已經是最小和start!= 0返回不正確的位置。將其更改爲

int location = start; 

,或者您可以使用start代替location

int min(int start) 
{ 
    for (int i = start + 1; i < size; i++) 
    { 
     if (list[i] < list[start]) 
      start = i; 
    } 
    return start; 
} 
+0

工程就像一個魅力!我改變了上面的部分列出[開始],甚至沒有注意到位置之一。 – user6204551

1

@Slava解釋爲什麼現有的代碼被打破,如何解決它。

我想提供一種替代解決方案 - 學習使用標準STL algorithms

std::sort()算法:

按升序順序

#include <algorithm> 

void sort() 
{ 
    std::sort(&list[0], &list[size]); 
} 
即使你想實現自己的 sort()邏輯

範圍[第一要素,最後)(儘管std::sort()確實允許您傳入自定義函數來實現自定義排序),但您的min()函數可以使用STL std::min_element()算法,而您的sort()函數可以使用STL std::swap()算法:

#include <algorithm> 

int min(int start) 
{ 
    int *found = std::min_element(&list[start], &list[size]); 
    return std::distance(&list[0], found); 
} 

void sort() 
{ 
    for (int i = 0; i < size; i++) 
    { 
     int minimum = min(i); 
     if (minimum != i) 
      std::swap(list[i], list[minimum]); 
    } 
}