2013-10-27 13 views
0

У меня есть матрица из 50 строк и 2 столбца, и я хочу отсортировать их на основе сравнение значения второго столбца, поданного. Вот что я имею в виду, если моя матрица, как:сортировка матрицы на основе сравнения столбцов

[00][01] 
[10][11] 
[20][21] 
[30][31] 
[40][41] 
[50][51] 

Я хочу сравнить [01] и [11], и если [01] меньше, чем [11] Я хочу обменять всю вторую строку с первой строкой , чтобы быть, как это (например):

[10][11] 
[00][01] 
[20][21] 
[30][31] 
[40][41] 
[50][51] 

Я попытался с помощью C# и придумал этот алгоритм, но он не работает:

int temp1, temp2; 
        for (int i = 0; i < 50; i++) 
        { 
         for (int j = i + 1; j < 2; j++) 
         { 
          if (rating[i, j] < rating[i + 1, j]) 
          { 
           temp1 = rating[i + 1, j - 1]; 
           temp2 = rating[i + 1, j]; 

           rating[i + 1, j - 1] = rating[i, j - 1]; 
           rating[i + 1, j] = rating[i, j]; 

           rating[i, j - 1] = temp1; 
           rating[i, j] = temp2; 
          } 
         } 
        } 

Может кто-нибудь сказать мне ключ к тренировке этой проблема или если у вас есть ответ в c, C++ или другом языке пожалуйста, поделитесь им с нами.

спасибо.

ответ

0

Ваша реализация алгоритма сортировки неверна. Внутренний цикл не должен работать от + 1 до 1.

Попробуйте реализации простой пузырьковой сортировки:

for (int i = 0; i < 50; i++) 
{ 
    for (int j = 0; j < 49-i; j++) 
    { 
    if (rating[j, 1] < rating[j + 1, 1]) // column 1 entry comparison 
    { 
     temp1 = rating[j, 0];    // swap both column 0 and column 1 
     temp2 = rating[j, 1]; 

     rating[j, 0] = rating[j+1, 0]; 
     rating[j, 1] = rating[j+1, 1]; 

     rating[j+1, 0] = temp1; 
     rating[j+1, 1] = temp2; 
    } 
    } 
} 
+0

Частично это работало. См. Изображение: http://im41.gulfup.com/TrGUn.bmp Где я указал красным цветом, второй столбец имеет номер 5, который должен быть самым высоким. Должно быть так: .. 5 .. 5 .. 5 .. 5 .. 4 .. 4 .. 4 .......... и так далее. –

+0

Я отредактировал небольшую ошибку в коде. –

+0

полный код настолько длинный и сложный, и только это требование остается для завершения реализации. –

1

Я считаю, что вы пытаетесь сортировать матрицу в порядке убывания второй колонке. Попробуйте этот код.

int[][] mat = new[] { new[] { 4, 4 }, new[] { 5, 1 }, new[] { 3, 2 }, new[] { 6, 1 } }; 
var ordered = mat.OrderByDescending(i => i[1]); 
Смежные вопросы