2015-01-03 8 views
-5

나는 세 번째 인덱스에 의해 정렬 2 차원 배열에 거품 정렬을 수행하려고합니다 (정수)C# 2 차원 배열 거품 정렬

string[,] edges = new string[,] { {"A", "B", "2"}, 
              {"A", "C", "3"}, 
              {"A", "E", "10"}, 
              {"B", "C", "5"}, 
              {"B", "D", "10"}, 
              {"C", "D", "2"}, 
              {"D", "E", "5"}, 
              {"E", "B", "3"} 
             }; 

나는 정렬 코드의 IF의 statenent에 IndexOutOfRangeException을 얻을

 string[] temp = {}; 

     //sort edges and add them to sortedEdges - using bubblesort 
     for (int i = 0; i < edges.Length - 1; i++){ 
      for (int j = 0; j < edges.Length - 1; j++){ 
       if (Int32.Parse(edges[i, 2]) > Int32.Parse(edges[i + 1, 2])){ 
        //make a swap 
        //put array record i into temp holder 
        temp[0] = edges[i, 0]; 
        temp[1] = edges[i, 1]; 
        temp[2] = edges[i, 2]; 

        //copy i + 1 into i 
        edges[i, 0] = edges[i + 1, 0]; 
        edges[i, 1] = edges[i + 1, 1]; 
        edges[i, 2] = edges[i + 1, 2]; 

        //copy temp into i + 1 
        edges[i + 1, 0] = temp[0]; 
        edges[i + 1, 1] = temp[1]; 
        edges[i + 1, 2] = temp[2]; 

       } 
      } 
     } 

제 질문은 배열 "가장자리"가 세 번째 열 순서대로 행으로 채워지도록 수정하는 방법입니다.

감사합니다.

+0

https://stackoverflow.com/help/mcve – philipxy

+0

사이드 노트 :' "3"' "정수"가 아닌 문자열입니다. 기본적으로 유형이 지정되지 않은 배열에 행 대신 데이터를 저장하는 데 적절한 구조를 사용해야합니다. –

+0

피드백을 주셔서 감사합니다. 정수로 정의한 필드를 지적했습니다. IF 문에서 정수로 변환합니다. 이 작업을 더 잘 수행 할 수 있다는 것을 알고 있지만 내 목표는 명확한 방식으로 작업하는 것입니다. – user4416058

답변

0

업데이트] V-3

이 문제는이 두 차원의 모든 요소를 ​​계산하는 것 때문에 귀하의 경우 24이었다 같은 정의 테이블 Length했다. 다음 코드를 시도해보십시오 :

string[] temp = new string[3]; 

for (int i = 0; i < edges.GetLength(0) - 1; i++){ 
    int j; 
    j = 0; 
    for (; j < edges.GetLength(0) - 1; j++){ 

     if (Int32.Parse(edges[j, 2]) > Int32.Parse(edges[j + 1, 2])){ 
      //make a swap 
      //put array record j into temp holder 
      temp[0] = edges[j, 0]; 
      temp[1] = edges[j, 1]; 
      temp[2] = edges[j, 2]; 

      //copy j + 1 into j 
      edges[j, 0] = edges[j + 1, 0]; 
      edges[j, 1] = edges[j + 1, 1]; 
      edges[j, 2] = edges[j + 1, 2]; 

      //copy temp into j + 1 
      edges[j + 1, 0] = temp[0]; 
      edges[j + 1, 1] = temp[1]; 
      edges[j + 1, 2] = temp[2]; 

     } 
    } 
} 
당신은 여기 (업데이트) 작업 예를 찾을 수 있습니다

: https://dotnetfiddle.net/FQs4OA

+0

고마워,하지만 난 여전히 같은 오류가 발생합니다. – user4416058

+0

그 무엇보다 코드 전체가 무엇이든합니다. 내가 왜 오류가 발생하는지 이해할 수 없습니다. 나는 계속 노력할 것입니다. – user4416058

+0

고마워, 그게 너를 위해 일 했니? 나는 똑같은 오류가있다. 나는 그것을 약간 좁혔다. 한계점은 비교의 두 번째 부분에있다. Int32.Parse (edges [i + 1, 2]) – user4416058