2016-09-18 32 views
-2

我正在尋找更少的內存消耗方式排序向量。 ATM我使用此解決方案:內存高效排序C++

void selectionSort(int arg[], int size){ 
    for(int i = 0; i < size; i++){ 
    int min = i; 
     for(int j = i+1; j < size+1; j++){ 
     if(arg[j]<arg[min]){ 
      min = j; 
      } 
     if(min != i){ 
      int temp1 = arg[min]; 
      int temp2 = arg[i]; 
      arg[min] = temp2; 
      arg[i] = temp1; 
      } 
     } 
    } 
} 

int main(int argc, char *argv[]) 
{ 
    vector<int> file; 

    ifstream in(argv[1]); 

    if(in.good()) 
    { 
    string line; 
    while(getline(in, line)){ 
     stringstream lineStream(line); 
     int value; 
     while(lineStream >> value){ 
      file.push_back(value); 
      } 
     } 

    int * tab; 
    tab = new int [file.size()]; 

    for(int i = 0; i < file.size(); i++){ 
     tab[i] = file.at(i); 
     cout << tab[i] << ","; 
     } 
    cout << endl; 

    selectionSort(tab, file.size()); 

    for(int n = 0; n < file.size(); n++){ 
    cout << tab[n] << ","; 
    } 

    delete[] tab; 
    } 

    return 0; 
} 

是否有可能使用矢量,而不是說我像這樣使用動態數組? 我在輸出中獲得了不變的矢量。

void selectionSort(vector<int> arg){ 
    for(int i = 0; i < arg.size(); i++){ 
    int min = i; 
     for(int j = i+1; j < arg.size()+1; j++){ 
     if(arg[j]<arg[min]){ 
      min = j; 
      } 
     if(min != i){ 
      int temp1 = arg[min]; 
      int temp2 = arg[i]; 
      arg[min] = temp2; 
      arg[i] = temp1; 
      } 
     } 
    } 
} 

這裏是主FUNC的片段:

selectionSort((file)); 

for(int n = 0; n < file.size(); n++){ 
    cout << file.at(n) << ","; 
    } 

} 

return 0; 
+5

通過引用傳遞向量:'void selectionSort(vector &arg){'。你也可以簡單地使用'std :: sort()'。 –

+0

謝謝!它現在完美無瑕。我正在學習排序方法atm,這就是爲什麼我不想使用它。 –

回答

0

如何從頭開始實現排序算法:

如果您有進一步興趣瞭解其他比較基於排序算法,如:( 1)合併排序,(2)插入排序,和(3)快速排序。請檢查斯坦福大學CS106B:編程抽象。 YouTube播放列表如下: https://www.youtube.com/playlist?list=PLFE6E58F856038C69

具體的講座是14,15,16。教授從頭開始實現所有這些算法,並比較解釋這些算法考慮速度,內存效率。

注意:但是,教授認爲學生對數組,指針和鏈表有非常基本的瞭解。如果你沒有這樣的基礎,請從第12講開始。

一切都好。請忽略錯別字。