본문 바로가기

자바/정리

(JAVA)배열 내림차순 오름차순

숫자가 6, 1, 8, 10, 9 가 있다고 가정해보자.

 

오름차순은 작은수부터 나열 하는 것인데. 나열해 보면 1, 6, 8, 9, 10 이 된다.

 

반대로 내림차순은 큰 수부터 나열 하는데. 나열해 보면 10, 9, 8, 6, 1 이 된다.

 

오늘은 어떻게 하는지 알아볼 것이다.

 

먼저 글로...

 

내림차순 비교하는 원리를 설명하면 6, 1, 8, 10, 9 숫자들중 6과 1이 큰지 비교하고 1과 8이 큰지 비교하고 8과 10이 큰지 비교하고 10과 9가 큰지 비교를 한다. 그런데 우리가 원하는건 비교하고 내림차순으로 출력을 하는것이지 않은가?

 

그래서 자리수를 큰수를 앞으로 바꿔주는 작업이 필요하다 교환하는셈이지 조건문에 의해

 

1.  6과 1을 비교하면 변동이 없을것이고

2. 1과 8은 교환되어 8과 1로 바뀌게 된다 (6,8,1,10,9)

3. 다시 1과 10은 10과 1로 변경이되고(6,8,10,1,9)

4. 1과 9는 9와 1로 변경이 되는 것이다. (6,8,10,9,1). 

 

이걸 반복문으로 .lenght 만큼 반복하면 숫자가 진열이 되는 셈이다. 상식적으로 오름차순은 반대로 하면 되겠지요...?

 

이걸 친절하게 풀어 놓는곳이 없어서 나는 이해하는데 시간이 걸렸지만... 이렇게 쓰고 보니 원리가 간단하지 않은가?

 

코드로 살펴보자

 

int[] arr = {6, 1, 8, 10, 9 };
for(int i=0; i<arr.length; i++) { // 앞에서부터 시작
 for(int j=i+1; j<arr.length; j++) {  //한단계 앞에서부터 시작
if(arr[i] < arr[j]){ // 앞뒤 크기 비교해주고 (내림차순)
 int temp = arr[i]; // 첫 값을 임시보관하고
  arr[i] = arr[j];   // 첫 값 자리에 앞의 수를 넣고
   arr[j] = temp;     // 앞의수 자리에 첫 값을 넣는다.
            }
        }
    }
    for (int number : arr)    // number라는 임시값 주고 arr 수만큼 반복 (이전 페이지에 자세히 설명함)
    {
        System.out.print(number + "\t"); // \t 해주면 탭키 누른효과줌
    }

 

혹시 맨아래 for문이 이해가 가질 않는다면 https://acid7937.tistory.com/8 여길 참고

 

하지만... 이렇게 까지 했지만 더 간편한 방법도 있다.

 

Integer[] array1 = {6, 1, 8, 10, 9};

Arrays.sort(array1, Collections.reverseOrder());

for(int i = 0; i < array1.length; i++)
{
    System.out.print(" " + array1[i]);
}

??? 이것도 같은 내림차순이다.

 

바로 Arrays.sort() 메서드를 사용하면 간단하게 해결 가능하다. 하지만 오름차순은 살짝 다른데.

 

int[] array = {6, 1, 8, 10, 9};

Arrays.sort(array);

for(int i = 0; i < array.length; i++)
{
    System.out.print(" "+ array[i] );
}

Collections.reverseOrder() 에 주의하자.

'자바 > 정리' 카테고리의 다른 글

(JAVA)클래스와 인스턴스  (1) 2022.11.09
(JAVA)메서드  (0) 2022.11.08
(JAVA)삼항 연산자  (0) 2022.11.08
(JAVA)향상된 for문 (Enhanced for 문)  (0) 2022.11.06
깃으로 협업하기  (0) 2022.10.31