2014-04-09 3 views
0

나는 2 차원 배열을 가지고 있으며 배열 2 열 값으로 행을 버블 정렬하고 싶습니다.특정 열 값으로 BubbleSort 2D 배열 행

나는 Arrival timeService time 값을 사용자로부터 받아서 배열 두 번째 열 값 (Arrival time)으로 버블 정렬하려고합니다.

첫 번째 열은 프로세스 번호입니다.

static int[][] atst = new int[5][5]; 
    for (int i = 0; i < atst.length; i++) { 
     System.out.print("Arrival time for process " + i + ": "); 
     atst[i][1] = in.nextInt(); 
    } 

    for (int i = 0; i < atst.length; i++) { 
     System.out.print("Enter service Times for process " + i + ": "); 
     atst[i][2] = in.nextInt(); 
    } 

    System.out.println("Before sorting: " + Arrays.deepToString(atst)); 

    for (int i = 0; i < atst.length; i++) { 
     for (int j = 1; j < (atst.length - 1); j++) { 
      if (atst[j - 1][1] > atst[j][1]) {  // Then swap! 
       int[] tempRow = atst[j - 1]; 
       atst[j - 1] = atst[j]; 
       atst[j] = tempRow; 
      } 
     } 
    } 

    System.out.println("After sorting :" + Arrays.deepToString(atst)); 

public static void swapRows(int[][] array, int rowA, int rowB) { 
    int[] tempRow = array[rowA]; 
    array[rowA] = array[rowB]; 
    array[rowB] = tempRow; 
} 

swapRows 방법은 작동하지만, 완전히 배열을 정렬하지 않습니다. 결과는 다음과 같이해야한다 반면

Arrival time for process 0: 5 
Arrival time for process 1: 4 
Arrival time for process 2: 3 
Arrival time for process 3: 2 
Arrival time for process 4: 1 

Enter service Times for process 0: 2 
Enter service Times for process 1: 3 
Enter service Times for process 2: 4 
Enter service Times for process 3: 5 
Enter service Times for process 4: 2 

Before sorting: [[0, 5, 2, 0, 0], [1, 4, 3, 0, 0], [2, 3, 4, 0, 0], [3, 2, 5, 0, 0], [4, 1, 2, 0, 0]] 
After sorting :[[3, 2, 5, 0, 0], [2, 3, 4, 0, 0], [1, 4, 3, 0, 0], [0, 5, 2, 0, 0], [4, 1, 2, 0, 0]] 

:

결과 업데이트 된 코드에서

[[4, 1, 2, 0, 0],[3, 2, 5, 0, 0],[2, 3, 4, 0, 0],[1, 4, 3, 0, 0],[0, 5, 2, 0, 0]] 
+2

배열을 한 번만지나칩니다. [Bubblesort] (http://en.wikipedia.org/wiki/Bubble_sort)는 O (n)이 아닌 O (n^2)입니다. 당신은 다른 루프가 빠져있는 것처럼 보입니다. 위키 피 디아 (Wikipedia) 기사에서 연결된 의사 코드를보고 코드와 비교하십시오. –

+0

@JamesMontagne 질문을 다시 한 번 읽어보십시오. – Sajad

답변

1

, 당신의 내부 루프의 경계가 올바르지 않습니다 :

for (int j = 1; j < (atst.length - 1); j++) { 

당신에게 여기에서 1을 뺀 마지막 요소를 제외하고 있습니다. 따라서 배열의 나머지는 la를 제외하고 정렬됩니다. st 요소. 다음과 같아야합니다.

for (int j = 1; j < atst.length; j++) { 
+0

예, 완벽하게 작동합니다. 감사합니다. – Sajad