본문 바로가기
JAVA

정렬 알고리즘(2) - 기본적인 정렬 알고리즘

by 고유빙글 2021. 4. 16.

몇가지 정렬 알고리즘을 더 찾아보았다 같이 탐색해보자

 

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문 한번으로 복잡도는 같으나 비교하는 횟수의 차이가 있고,

                     코드길이는 후자가 짧으나 비교횟수는 전자가 적다.

결과는 동일하다. 

어느게 유리한지 판단근거가 부족해 강사님께 여쭤보아야 겠다.