Language/Java

배열 순서대로 정렬하기

Anoi 2023. 1. 19. 11:39

배열 안 숫자들을 크기대로 정렬해보자

 

1) for문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        int[] arr1 = {5,3,4,2,1};
        int temp;
 
        for(int i=0; i<arr1.length-1; i++){
            for(int k=i+1; k<arr1.length; k++){
                if(arr1[i]>arr1[k]){
                    temp=arr1[i];
                    arr1[i]=arr1[k];
                    arr1[k]=temp;
                }
            }
        }
 
        System.out.println(Arrays.toString(arr1));
        //[1, 2, 3, 4, 5]
 
cs

숫자를 순서대로 세우려면 첫번째 숫자를 2,3,4,5번째 숫자와 비교해야 한다.

그렇기 때문에 첫번째 for문은 0부터 시작하고 두번째 for문은 i보다 하나 크게 시작한다.

 

두번째 for문이 1부터 시작하는 게 아니라 i+1부터 시작하는 이유는

i가 3번째 숫자라고 가정할 때

이미 1,2번째 숫자는 비교가 되어 정렬된 상태이기 때문에 다시 비교할 필요없이 4번째 숫자부터 비교해야 하기 때문이다.

 

이 방법도 물론 가능하지만 이중 for문에다가 i, k값 설정할 때 실수가 나오기 쉬운 것 같다.

 

2) sort()

1
2
3
4
5
int[] arr2 = {5,3,4,2,1};
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
//[1, 2, 3, 4, 5]
 
cs
Arrays.sort(정렬할 배열 이름)

sort()를 사용하면 간단하게 해결할 수 있다.

숫자 뿐만 아니라 문자열도 정렬 가능하다.

1
2
3
4
        String strArr[] = {"사과""강아지""고양이","오리","너구리"};
        Arrays.sort(strArr);
        System.out.println(Arrays.toString(strArr));
        //[강아지, 고양이, 너구리, 사과, 오리]
cs

 

sort()는 기본적으로 오름차순 정렬이다.

내림차순으로 정렬하고 싶다면 Collections.reverseOrder를 인자로 추가하면 된다.

Arrays.sort(arr, Collections.reverseOrder());
1
2
3
4
5
6
        Integer[] arr = {5,4,3,2,1};
 
        Arrays.sort(arr, Collections.reverseOrder());
        System.out.println(Arrays.toString(arr));
        //[5, 4, 3, 2, 1]
 
cs

다만, Collections로 인해 primitvie 타입을 쓸 수 없어 int 대신 Integer 타입의 배열을 이용해야 한다.