# Pset3: Tideman sort_pairs not work

I have been trying to implement sort_pairs function using selection sort algorithm. After testing for every case, the sort_pairs is returning right answer but check50 is marking it as wrong.

``````for (int i = 0; i < pair_count - 1; i++)
{
winner_index = pairs[i].winner;
loser_index = pairs[i].loser;
diff = preferences[winner_index][loser_index];
int max_index = i;
for (int j = i+1; j < pair_count; j++)
{
winner_index1 = pairs[j].winner;
loser_index1 = pairs[j].loser;
int diff2 = preferences[winner_index1][loser_index1];
if (diff2 > diff)
{
max_index = j;
}

}
if (i != max_index)
{
pairs[i].winner = winner_index1;
pairs[i].loser = loser_index1;

pairs[max_index].winner = winner_index;
pairs[max_index].loser = loser_index;
}
}
``````

Here's the code for reference.

``````Before Sorting
c a 6
b c 5
a b 7
After Sorting
a b 7
c a 6
b c 5
``````

This is what I am getting as an output where a,b,c are candidates and the numbers are preferences.

## 1 Answer

Check with strengths 1, 3, 2, in that order, with the highest value not being last.

When you update `max_index`, you should also update `diff`. Otherwise, a later pair might be chosen that's stronger than the initial pair, but not the overall strongest.

Alternatively, directly use `pairs[max_index]` for the comparison.

Your swap action also relies on `winner_index1` and `loser_index1` to represent the pair to swap with, but they are the pair checked last, which is not necessarily same as `pairs[max_index]` in either version.

You could use a temporary variable for swapping, like

``````pair temp = pairs[i];
pairs[i] = pair[max_index];
pairs[max_index] = temp;
``````