JAVA
정렬 알고리즘(2) - 기본적인 정렬 알고리즘
고유빙글
2021. 4. 16. 02:11
몇가지 정렬 알고리즘을 더 찾아보았다 같이 탐색해보자
public class Selection {
static int[] input = { 5, 6, 2, 8, 7, 23, 4, 1 };
public static void main(String[] args) {
selectionSortMin(input, input.length);
for (int a : input) {
System.out.print(a + " ");
}
going(input, input.length);
for (int a : input) {
System.out.print(a + " ");
}
}
static void selectionSortMin(int[] input, int length) {
int min;
int tmp;
for (int i = 0; i < length - 1; i++) {
min = i;
for (int j = i + 1; j < length; j++) {
if (input[j] < input[min]) {
min = j;
}
}
tmp = input[i];
input[i] = input[min];
input[min] = tmp;
}
}
///////////////////////////////////////////////////////////////////////////////
static void going(int[] input, int length) {
int tmp;
for (int i = 0; i < length; i++) {
for (int j = 0; j < i; j++) {
if (input[i] < input[j]) {
tmp = input[i];
input[i] = input[j];
input[j] = tmp;
}
}
}
}
}
두 메소드의 결과는 같다.
첫번째 메소드의 동작과정은
1. i인덱스가 두번째 반복문에 i인덱스보다 값이 작은 인덱스의 값이 있을경우
2. 그 인덱스중 가장 오른쪽의 인덱스를 min에 저장
3. 두 인덱스의 값을 서로 바꾼다.
4. 이를 반복해 오름차순을 구현한다.
두번째 메소드는
1. i인덱스의 값이 그 앞의 ( 0 ~ i-1 )인덱스의 값보다 작은경우
2. 두 값을 서로 바꾼다.
두 메소드 모두, for문 두번 if문 한번으로 복잡도는 같으나 비교하는 횟수의 차이가 있고,
코드길이는 후자가 짧으나 비교횟수는 전자가 적다.
결과는 동일하다.
어느게 유리한지 판단근거가 부족해 강사님께 여쭤보아야 겠다.