Study/Java

Java: 1차원, 2차원 배열 오름차순, 내림차순 정렬 요약과 이해

devyoseph 2021. 11. 1. 08:59

1차원 배열 정렬

java.util 안에 있는 Arrays 클래스를 가져온다

1차원 배열 오름차순 1차원 배열 내림차순
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
Arrays.sort( 배열 ); Arrays.sort( 배열 , Collections.reverseOrder() );
int 배열 사용 가능 Wrapper Class 사용(Integer 등)

*내림차순에서는 int가 아닌 Integer을 사용함에 유의한다

import java.util.Arrays;
public class Main {
	public static void main(String[] args){
		Integer[] arr = {3,5,2,1,4,6,9,8,7};
		Arrays.sort(arr);

		for(int i=0; i<9;i++) {
			System.out.print(arr[i]+" ");
		} //오름차순으로 정렬: 1 2 3 4 5 6 7 8 9
    }}
import java.util.Arrays;
import java.util.Collections;
public class Main {
	public static void main(String[] args){
		Integer[] arr = {3,5,2,1,4,6,9,8,7};
		Arrays.sort(arr, Collections.reverseOrder());

		for(int i=0; i<9;i++) {
			System.out.print(arr[i]+" ");
		}  //내림차순으로 정렬: 9 8 7 6 5 4 3 2 1
 }}

 

 

2차원 배열 정렬

Comparator 클래스를 사용해 compare 함수를 재정의한다

2차원 배열 오름차순 2차원 배열 내림차순
import java.util.Arrays;
import java.util.Comparator;
import java.util.Arrays;
import java.util.Comparator;
Arrays.sort( 배열, new Comparator<int[]>() {내부구문} ); Arrays.sort( 배열, new Comparator<int[]>() {내부구문});
if(o1[0]==o2[0]) return o1[1]-o2[1];
else return o1[0]-o2[0];
if(o1[0]==o2[0]) return o1[1]-o2[1];
else return o2[0]-o1[0];

 

이해를 위해 Arrays.sort를 먼저 작성해본다

import java.util.Arrays;
import java.util.Comparator;
public class Main {
	public static void main(String[] args){
		 int[][] arr = {{3,5},{2,1},{4,6},{9,8},{7,10}};
		Arrays.sort(arr, new Comparator<int[]>() {
			
		} );
        
        //이렇게 작성하면 Comparator가 빨간줄이 뜨는데 마우스를 올려놓으면
        //자동완성해준다(Override를 생성)
 }}

Arrays.sort(arr, new Comparator<int[]>() { } );

위처럼 중괄호를 넣는 순간 빨간줄이 뜨고 클릭하면 자동완성해준다

import java.util.Arrays;
import java.util.Comparator;
public class Main {
	public static void main(String[] args){
		 int[][] arr = {{3,5},{2,1},{4,6},{9,8},{7,10}};
		Arrays.sort(arr, new Comparator<int[]>() {

			@Override
			public int compare(int[] o1, int[] o2) {
				// TODO Auto-generated method stub
				return 0;
			}
			
		} );
 }}

이중배열에 대한 정렬기준을 정해주어야 한다(compare 함수 수정).

이 배열 안에서는 정수형과 정수형이 아닌 배열과 배열의 비교, 즉 객체와 객체를 비교한다

정렬은 1 대 1 비교를 통해 이루어지므로 어떤 객체 o1과 o2로 표현할 수 있다

 

1) 둘의 값을 무엇으로 비교할 것인지 표기한다. ex) o1[0], o2[0]

2) 둘이 비교하는 값이 같을 경우 어떻게 배열할 것인지 표기한다

ex) if(o1[0]==o2[0]) return o1[1]-o2[1] //[0]항이 같으면 [1]항을 기준

3) 오름차순, 내림차순 중 방법을 정해준다

ex) if(o1[0]==o2[0]) return o1[1]-o2[1]; //o2[1]-o1[1]은 내림차순

import java.util.Arrays;
import java.util.Comparator;
public class Main {
	public static void main(String[] args){
		 int[][] arr = {{3,5},{2,1},{4,6},{9,8},{7,10}};
		Arrays.sort(arr, new Comparator<int[]>() {

			@Override
			public int compare(int[] o1, int[] o2) {
					if(o1[0]==o2[0]) return o1[1]-o2[1];
					else return o1[0]-o2[0];
			}});
        
        //출력구문
       for(int i=0; i<5;i++) {
			System.out.print("["+arr[i][0]+","+arr[i][1]+"]"+" ");
		}
 }}

[0]항을 기준으로 정렬되었다