Baekjoon algorithm training

[백준] 2750 (수 정렬하기)

interfacer_han 2023. 11. 11. 14:43

#1 알고리즘

 

버블 정렬 (Bubble Sort)

#1 알고리즘 정렬 방식이 마치 거품이 수중에 있다가 수면 위로 뽀글뽀글 올라가는 모습과 비슷해서 버블 정렬이라고 이름 붙여졌다. 기본적인 버블 정렬은, 정렬 작업을 시작할 때 중간에 배열

kenel.tistory.com

정렬 알고리즘은 여러 가지가 있다. 상황에 맞추어 가장 적절한 알고리즘을 골라야 하지만, 나는 알고리즘을 공부 중이므로 사용해 보지 않은 정렬 알고리즘 중에 아무거나 골라서 사용한다. 이 문제에 사용할 알고리즘은 버블 정렬(Bubble Sort)이다. 

 

#2 코드

#2-1 자바

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int arrayLength = sc.nextInt();
        sc.nextLine(); // 입력 버퍼의 첫째 줄 비워내기

        int[] array = new int[arrayLength];

        for (int i = 0; i < array.length; i++) {
            array[i] = Integer.parseInt(sc.nextLine().trim());
        }
        
        bubbleSort(array, 0, array.length - 1);
            
        for(int i = 0; i < array.length; i++) {
            System.out.println(Integer.toString(array[i]));
        }
        
    }

    private static void bubbleSort(int[] array, int startIndex, int endIndex) {
        
        for(int maxIndex = endIndex; startIndex < maxIndex; maxIndex--) {
            boolean isSorted = true;
            
            // 배열의 0 ~ (maxIndex - 1)번째 원소를 순회한다 
            for(int i = 0; i < maxIndex; i++) {
                
                //해당 원소가 바로 오른쪽 원소보다 크면 값을 서로 교환한다 
                if(array[i + 1] < array[i]) {                    
                    int temp = array[i + 1];
                    array[i + 1] = array[i];
                    array[i] = temp;
                    
                    isSorted = false;
                }
            }
            
            // 교환이 한번도 일어나지 않았다면 정렬 작업을 종료한다
            if(isSorted) {
                break;
            }
        }
    }
}

 

#2-2 코틀린

fun main() {
    val arrayLength = readln()!!.trim().toInt()
    val array : Array<Int> = Array(arrayLength) { 0 }

    for(i : Int in 0..(array.size - 1)) {
        array[i] = readln()!!.trim().toInt()
    }

    bubbleSort(array, 0, (array.size - 1))

    for(i : Int in 0..(array.size - 1)) {
        println(array[i].toString())
    }
}

fun bubbleSort(array: Array<Int>, startIndex : Int, endIndex : Int) {

    for(maxIndex : Int in endIndex downTo (startIndex + 1)) {
        var isSorted = true

        // 배열의 0 ~ (maxIndex - 1)번째 원소를 순회한다
        for(i : Int in 0..(maxIndex - 1)) {

            // 해당 원소가 바로 오른쪽 원소보다 크면 값을 서로 교환한다
            if(array[i + 1] < array[i]) {
                val temp = array[i + 1]
                array[i + 1] = array[i]
                array[i] = temp

                isSorted = false
            }
        }

        // 교환이 한번도 일어나지 않았다면 정렬 작업을 종료한다
        if(isSorted) {
            break
        }
    }
}

'Baekjoon algorithm training' 카테고리의 다른 글

[백준] 10809 (알파벳 찾기)  (0) 2023.11.16
[백준] 2751 (수 정렬하기 2)  (0) 2023.11.15
[백준] 2292 (벌집)  (0) 2023.11.10
[백준] 2231 (분해합)  (0) 2023.11.09
[백준] 1978 (소수 찾기)  (0) 2023.11.08