2012-11-14 4 views
0

임의의 숫자를 2D 배열로 정렬하는 데 도움이 필요합니다. 배열의 열에 50 개의 임의의 숫자를 생성 한 다음 숫자를 오름차순 또는 내림차순으로 정렬해야합니다. 이것은 내가 지금까지 가지고 있으며 잃어버린 것이다. 도와주세요.2D 배열로 정렬

public static void main(String[] args) 
{ 
    int rows = 2; 
    int columns = 50; 

    int[][] anArray = new int[rows][columns]; 

    Random rand = new Random(); 

    for (int i = 0; i < anArray.length; i++) 
    { 
     for (int j = 0; j < anArray[0].length; j++) 
     { 
      int n = rand.nextInt(100); 
      anArray[i][j] = n; 
     } 
    } 

    int []temp; 
    for (int i=0;i<anArray.length;i++) 
     { 
      for (int j=0;j<anArray.length-i;j++) 
      { 
       if (anArray[i][j]>anArray[i][j+1]) 
       { 
        temp =anArray[j]; 
        anArray[j+1]=anArray[j]; 
        anArray[j+1]=temp; 
       } 
      } 
     } 

    for (int i = 0; i < anArray.length; i++) 
    { 
     for (int j=0;j<anArray.length-i;j++) 
     { 
      System.out.println(anArray[i][j]); 
     } 
    }   
} 
} 
+0

했다 것처럼 배열을 정렬? – dreamcrash

+0

그건 내 교수님이 내가하고 싶어하는 방식입니다. –

답변

1

사용자 정의 Comparator 사용하여 초기 요소의 2 차원 배열을 정렬 할 수 있습니다 업데이트 된 버전 : 모든

Arrays.sort(anArray, new Comparator<int[]>() { 
    public int compare(int[] lhs, int[] rhs) { 
     return lhs[0]-rhs[0]; 
    } 
}); 
0

먼저, 당신이 순서로 루프에 대한 중첩 필요 2 차원 배열에 난수를 올바르게 삽입하십시오. 또한 정렬을 수행하는 방법을 보여주기 위해 내 응답을 업데이트했습니다. 희망이 도움이!

아래의 코멘트에 언급 된 만족스러운 요구 사항을 편집했습니다.

import java.util.Arrays; 
import java.util.Random; 


public class Test { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    int rows = 2; 
    int columns = 50; 

    int[][] anArray = new int[rows][columns]; 

    Random rand = new Random(); 
    //initialize the first row only 
    for (int j = 0; j < anArray[0].length; j++) 
    { 
     int n = rand.nextInt(100); 
     anArray[0][j] = n; 
    } 
    System.out.println("-----------Before the Sort----------------"); 
    for (int i = 0; i < anArray.length; i++) 
    { 
     for (int j = 0; j < anArray[0].length; j++) 
     {    
      System.out.print(anArray[i][j] + ", "); //format any way you want 
     } 
     System.out.println(); //to make each row print on a new line. 
    } 
    anArray = mySort(anArray); 
    System.out.println("-----------After the Sort----------------"); 
    for (int i = 0; i < anArray.length; i++) 
    { 
     for (int j = 0; j < anArray[0].length; j++) 
     {    
      System.out.print(anArray[i][j] + ", "); //format any way you want 
     } 
     System.out.println(); //to make each row print on a new line. 
    } 
} 

private static int[][] mySort(int[][] anArray) { 
    int [][] result = new int[anArray.length][anArray[0].length]; 
    int thisRow[] = getRow(anArray, 0); 
    Arrays.sort(thisRow); 
    for(int j = 0; j < thisRow.length; j++){ 
     result[0][j] = anArray[0][j]; 
     result[1][j] = thisRow[j]; 
    } 
    return result; 
} 

private static int[] getRow(int[][] anArray, int row) { 
    int thisRow[] = new int[anArray[row].length]; 
    for(int j = 0; j < anArray[row].length; j++){ 
     thisRow[j] = anArray[row][j]; 
    } 
    return thisRow; 
} 

} 당신은 2D 배열 1D을 고려하여 정렬 할 수 있습니다

+0

이봐, 이제 31 행에서 "ArrayIndexOutOfBoundsException : 2"오류가 발생합니다. if (anArray [i] [j]> anArray [i] [j + 1]) "이 원인은 무엇입니까? –

+0

이 배열을 어떻게 정렬 하시겠습니까? 각 행을 정렬하거나 각 열을 정렬 하시겠습니까? – rharrison33

+0

실제로 행별로 정렬하려는 경우 완전한 솔루션을 제공하도록 코드를 업데이트했습니다. – rharrison33

0

. 3x4 배열을 생각해 봅시다. 첫번째 요소의 인덱스가 0, 2 번째는 1, 3 등, 5는 4, 4가 3, 2

일반 공식은 2 차원에 1D 인덱스 변환하는 : 예를 들어

row_index = _1D_index % nRows; 
col_index = _1D_index % nCols; 

5 번째 원소는 1D 지수가 4이고, 행을 얻습니다 : 4 % 3 = 1, col, 4 % 4 = 0을 얻으므로 원소는 1,0입니다. 이 모든 것의 핵심은 무엇입니까? 이제 당신은 단지의 라인을 따라 함수

int GetAt(int index) 
{ 
    return array[index % nRows][index % nCols]; 
} 

뭔가 만들 수 있습니다

void Swap(int index1, int index2) 
{ 
    int r1 = index1 % nRows; 
    int c1 = index1 % nCols; 
    int r2 = index2 % nRows; 
    int c2 = index2 % nCols; 
    int temp = array[r1][c1]; 
    array[r1][c1] = array[r2][c2]; 
    array[r2][c2] = temp; 
} 

을 그리고 그것은 차원 하나 : 당신은 왜 2D를 사용하는