🔙뒤로가기

어떤 응용 프로그램에서는 LinkedList가 빠르게 동작하고, 다른 프로그램에서는 ArrayList가 빠르게 동작할 수 있다. 어떤 응용 프로그램에서는 LinkedList가 빠르게 동작하고, 다른 프로그램에서는 ArrayList가 빠르게 동작할 수 있다. 이런 접근법을 프로파일링이라고 한다. 그런데 여기에는 몇 가지 문제가 있다.

  1. 비교할 알고리즘들을 사전에 모두 구현해야 한다.
  2. 결과는 컴퓨터 성능에 영향을 받는다. 컴퓨터의 성능에 따라 특정 알고리즘이 더 빠르게 작동할 수도 있다.
  3. 결과는 입력되는 데이터의 크기와 종류에 따라 달라질 수 있다.

이러한 문제들을 해결하기 위해 알고리즘 분석이라는 방법을 사용할 수 있다.

알고리즘 분석 예시

대부분 간단한 알고리즘은 다음 몇 가지 범주로 나뉜다.

2.1 선택 정렬

public class SelectionSort {
    /*
    배열의 i와 j 인덱스에 있는 값을 서로 바꾼다.
     */
    public static void swapElements(int[] array, int i, int j){
        int temp = array[i];
        array[i] = array[j];
        array[j]= temp;
    }

    /*
    start로부터 시작하는 최솟값의 위치를 찾고(start 포함),
    배열의 마지막 위치까지 확인한다.
     */
    public static int indexLowest(int[] array, int start){
        int lowIndex = start;
        for(int i = start; i < array.length; i++){
            if (array[i] < array[lowIndex]){
                lowIndex = i;
            }
        }
        return lowIndex;
    }

    /*
    선택 정렬을 사용하여 배열의 요소를 정렬한다.
     */
    public static void selectionSort(int[] array){
        for(int i = 0; i < array.length; i++){
						// i부터 시작하는 최소값의 위치 j를 찾고
            int j = indexLowest(array, i); 
						// array의 다음 순서에 j를 넣는다.
            swapElements(array, i, j); 
        }
    }
}

swapElements 메소드

public static void swapElements(int[] array, int i, int j){
    int temp = array[i];
    array[i] = array[j];
    array[j]= temp;
}