2013-04-10 2 views
0

플레이어 하키 통계의 이진 파일에서 목록을 정렬하려고합니다. 내 목표는 선택 정렬 알고리즘을 사용하여 포인트 = 목표 + 어시스트가있는 게임의 포인트 수를 기준으로 내림차순으로 목록을 정렬하는 것입니다.선택 정렬을 사용하여 플레이어 포인트를 기준으로 목록을 정렬합니까?

각 배열이 선수 통계의 구조 인 구조 배열을 사용하고 있습니다.

다음은 구조입니다.

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

답변

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); 

이것은 적은 코드로 플레이어를 던져 그것은 또한보다 효율적 (O (n log n)) 선택 정렬 (O (n^2)) 구현보다.

+0

불행히도 나는 그렇지 않으면 내가해야 할 일, 그것이 운동의 요점이다. – Scholar