2013-10-27 3 views
0

나는 50 행 2 열의 행렬을 가지고 있으며 을 기반으로 정렬하려면의 두 번째 열 값을 비교해야합니다. 여기에 내가 무엇을 의미하는지, 내 매트릭스로하는 경우 : 내가 [01]를 비교하고 싶은열 비교를 기반으로 정렬 행렬

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

[11] 그리고 만약 [01] [11] 내가 첫 번째 행에 전체 두 번째 행을 교환하기 원하는 것보다 적은 나는 C#을 사용하고이 알고리즘 해낸 시도

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

했지만 작동하지 않았다 : (예) 이렇게 될

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]); 
관련 문제