몇가지 정렬 알고리즘을 더 찾아보았다 같이 탐색해보자
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문 한번으로 복잡도는 같으나 비교하는 횟수의 차이가 있고,
코드길이는 후자가 짧으나 비교횟수는 전자가 적다.
결과는 동일하다.
어느게 유리한지 판단근거가 부족해 강사님께 여쭤보아야 겠다.
'JAVA' 카테고리의 다른 글
call by Value, call by reference. 근데 자바는 call by value만 쓴다고? (0) | 2022.12.27 |
---|---|
변수, 기본형, 참조형 선언 with 메모리 (1) | 2022.12.26 |
==연산자와 .equals() 그리고 hashCode (0) | 2022.01.27 |
정렬 알고리즘 - 오름차순 (0) | 2021.04.14 |
new 연산자와 반복문 (0) | 2021.04.14 |