본문 바로가기
프로그래밍 기초/Java Festival

[Java Festival] Bonus05. 정수 오름차순 정렬하기

by 제이투더문 2024. 7. 4.

 

 안녕하세요, 작가 J입니다. 이번에는 5개의 정수를 입력받아 오름차순으로 정렬하여 출력하는 프로그램을 구현해 보겠습니다. 이 예제는 정렬 알고리즘의 기초를 배우는 데 도움이 됩니다. 우리는 버블 정렬, 선택 정렬, 그리고 Arrays.sort를 사용하여 문제를 해결해 보겠습니다.

 

[Java Festival Bonus05] 정수 오름차순 정렬하기

5개의 정수를 입력 받아

오름차순 정렬하여 출력하는 프로그램을 구현하시오.

 

 

 

 

코드 풀이

코드 풀이 1: 버블 정렬을 사용한 방식

package Bonus;

import java.util.Scanner;

public class Bonus05 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] num = new int[5];
        
        // 사용자로부터 5개의 정수를 입력받기
        for (int i = 0; i < num.length; i++) {
            System.out.print((i + 1) + "번째 수 입력 : ");
            num[i] = sc.nextInt();
        }
        
        // 버블 정렬을 사용하여 배열을 오름차순으로 정렬
        for (int i = 0; i < num.length - 1; i++) { // 배열의 크기-1 만큼 반복
            for (int j = 0; j < num.length - 1 - i; j++) { // 인접한 두 요소 비교
                if (num[j] > num[j + 1]) { // 현재 요소가 다음 요소보다 크면
                    int temp = num[j]; // 두 요소를 교환
                    num[j] = num[j + 1];
                    num[j + 1] = temp;
                }
            }
        }
        
        // 정렬된 배열 출력
        System.out.print("정렬 후\n");
        for (int i : num) {
            System.out.print(i + " ");
        }
    }
}

 

1. 사용자 입력받기

  • Scanner sc = new Scanner(System.in);: 사용자 입력을 받기 위해 Scanner 객체를 생성합니다.
  • int[] num = new int[5];: 5개의 정수를 저장할 배열을 선언합니다.
  • for (int i = 0; i < num.length; i++) { ... }: 사용자로부터 5개의 정수를 입력받아 배열에 저장합니다.

 

2. 버블 정렬을 사용하여 배열을 오름차순으로 정렬

  • for (int i = 0; i < num.length - 1; i++) { ... }: 외부 반복문은 배열의 크기-1만큼 반복합니다.
  • for (int j = 0; j < num.length - 1 - i; j++) { ... }: 내부 반복문은 인접한 두 요소를 비교하여, 더 큰 요소를 뒤로 보냅니다.
  • if (num[j] > num[j + 1]) { ... }: 현재 요소가 다음 요소보다 크면 두 요소를 교환합니다.

 

3. 정렬된 배열 출력

  • for (int i : num) { ... }: 정렬된 배열을 출력합니다.

 

버블 정렬 (Bubble Sort)

버블 정렬은 인접한 두 요소를 비교하여 더 큰 요소를 뒤로 보내는 과정을 반복하여 배열을 정렬하는 방법입니다. 배열의 크기만큼 반복하며, 각 반복마다 가장 큰 요소가 끝으로 이동합니다.

 

코드 풀이 2 : 선택 정렬을 사용한 방식

package Bonus;

import java.util.Scanner;

public class Bonus05SelectionSort {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] num = new int[5];
        
        // 사용자로부터 5개의 정수를 입력받기
        for (int i = 0; i < num.length; i++) {
            System.out.print((i + 1) + "번째 수 입력 : ");
            num[i] = sc.nextInt();
        }
        
        // 선택 정렬을 사용하여 배열을 오름차순으로 정렬
        for (int i = 0; i < num.length - 1; i++) { // 배열의 크기-1 만큼 반복
            int minIndex = i; // 현재 최소값의 인덱스를 저장
            for (int j = i + 1; j < num.length; j++) { // 현재 최소값보다 작은 요소 찾기
                if (num[j] < num[minIndex]) { 
                    minIndex = j; // 더 작은 요소의 인덱스를 업데이트
                }
            }
            int temp = num[minIndex]; // 두 요소를 교환하여 최소값을 앞쪽에 위치
            num[minIndex] = num[i];
            num[i] = temp;
        }
        
        // 정렬된 배열 출력
        System.out.print("정렬 후\n");
        for (int i : num) {
            System.out.print(i + " ");
        }
    }
}

 

 

1. 선택 정렬을 사용하여 배열을 오름차순으로 정렬

  • for (int i = 0; i < num.length - 1; i++) { ... }: 외부 반복문은 배열의 크기-1만큼 반복합니다.
  • int minIndex = i;: 현재 최소값의 인덱스를 저장합니다.
  • for (int j = i + 1; j < num.length; j++) { ... }: 내부 반복문은 현재 최소값보다 작은 요소를 찾습니다.
  • if (num[j] < num[minIndex]) { ... }: 더 작은 요소를 찾으면 최소값의 인덱스를 업데이트합니다.
  • 두 요소를 교환하여 최소값을 배열의 앞쪽에 위치시킵니다.

 

 

선택 정렬 (Selection Sort)

선택 정렬은 배열에서 가장 작은 요소를 찾아 첫 번째 요소와 교환하고, 다음으로 작은 요소를 찾아 두 번째 요소와 교환하는 과정을 반복하여 배열을 정렬하는 방법입니다.

 

코드 풀이 3 : Arrays.sort를 사용한 방식

package Bonus;

import java.util.Arrays;
import java.util.Scanner;

public class Bonus05ArraySort {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] num = new int[5];
        
        // 사용자로부터 5개의 정수를 입력받기
        for (int i = 0; i < num.length; i++) {
            System.out.print((i + 1) + "번째 수 입력 : ");
            num[i] = sc.nextInt();
        }
        
        // Arrays.sort를 사용하여 배열을 오름차순으로 정렬
        Arrays.sort(num);
        
        // 정렬된 배열 출력
        System.out.print("정렬 후\n");
        for (int i : num) {
            System.out.print(i + " ");
        }
    }
}

 

 

 

1. Arrays.sort를 사용하여 배열을 오름차순으로 정렬

  • Arrays.sort(num);: 배열을 오름차순으로 정렬합니다.
  • Arrays.sort()는 자바에서 제공하는 정렬 함수로, 배열을 빠르게 정렬해 주는 매우 유용한 메서드입니다. 이 함수는 퀵 정렬, 합병 정렬, 팀소트(TimSort) 알고리즘을 사용하여 매우 효율적으로 정렬합니다.

 

 

마무리

이번 예제에서는 5개의 정수를 입력받아 오름차순으로 정렬하는 세 가지 방법을 다뤄보았습니다. 각 방법의 효율성을 고려하여 설명하겠습니다.

  1. Arrays.sort(): 가장 효율적인 방법으로, 팀소트(TimSort) 알고리즘을 사용하여 매우 빠르게 배열을 정렬합니다. 대부분의 경우 이 방법을 사용하는 것이 좋습니다.
  2. 선택 정렬 (Selection Sort): 단순하고 이해하기 쉬운 정렬 방법이지만, 효율성은 떨어집니다. 배열의 크기가 작을 때 사용하기 적합합니다.
  3. 버블 정렬 (Bubble Sort): 가장 비효율적인 정렬 방법 중 하나입니다. 단순한 구현이 가능하지만, 배열의 크기가 커지면 성능이 급격히 저하됩니다.

프로그래밍을 시작하는 모든 분께 이 예제가 도움이 되길 바랍니다. 앞으로도 다양한 유형의 문제를 통해 여러분의 학습을 도울 수 있도록 노력하겠습니다. 감사합니다!