어떤 응용 프로그램에서는 LinkedList가 빠르게 동작하고, 다른 프로그램에서는 ArrayList가 빠르게 동작할 수 있다. 어떤 응용 프로그램에서는 LinkedList가 빠르게 동작하고, 다른 프로그램에서는 ArrayList가 빠르게 동작할 수 있다. 이런 접근법을 프로파일링이라고 한다. 그런데 여기에는 몇 가지 문제가 있다.
이러한 문제들을 해결하기 위해 알고리즘 분석이라는 방법을 사용할 수 있다.
대부분 간단한 알고리즘은 다음 몇 가지 범주로 나뉜다.
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);
}
}
}
public static void swapElements(int[] array, int i, int j){
int temp = array[i];
array[i] = array[j];
array[j]= temp;
}