2013-04-10 74 views
0

我在嘗試從玩家曲棍球統計數據的二進制文件中排序列表。我的目標是使用選擇排序算法來根據遊戲中points = goals + assists的點數降序對列表進行排序。使用選擇排序根據玩家點數對列表進行排序?

我正在使用一個結構數組,其中每個數組都是玩家統計數據的結構。

這是結構。

struct Player 
{ 
char name[20]; 
int goals; 
int assists; 
int rating; 
}; 

這是我在我的排序數組函數到目前爲止。

void sortArrays(Player players[], int numPlayers) 
int top=0; 
int ssf; 
int last=numPlayers; 
int ptr; 
int i = 0; 
Player temp; 

while (top < last)  
{ 
    ptr=top; 
    ssf=top; 

    pnts = players[i].goals + players[i].assists; 
    i++; 
} 

之後,我被卡住了。

下面是該功能假定在廣義上執行的步驟。通過使用公式點=播放器[I] .goals +玩家

  1. 計算數量的點[I] .assists

  2. 排序結構的基於點的數目的降序排列。

  3. 交換不同的數組,直到列表根據最大數量的點降序排列到最少。

+1

看看這個網頁http://en.wikipedia.org/wiki/Selection_sort。它有一些簡單的,很好的評論,用於進行選擇排序的C++代碼。適應你的問題。 – john 2013-04-10 22:41:12

回答

0

您是否必須使用選擇排序?你可以使用std::sort,而是如果你定義一個自定義的比較函數:

bool compare_players(Player const& a, Player const& b) { 
    return (b.goals + b.assists) < (a.goals + a.assists); 
} 

然後把你的玩家進入一個vector稱爲players,只是

std::sort(players.begin(), players.end(), &compare_players); 

這是更少的代碼,它的效率也更高(Ø (n log n))比實施選擇排序(O(n^2))。

+0

不幸的是,我必須或否認,這是練習的重點。 – Scholar 2013-04-10 22:48:59

相關問題