본문 바로가기
Java/Data Structures

4. 선택정렬

by lchit 2021. 3. 16.
public class SelectionSort {

	// 두 인덱스의 벨류를 바꾸는 메서드
	// 정렬할 정수 배열과 서로 교체할 인덱스 i, j 를 인자로 받는다
	public static void swapElements(int[] arr, int i, int j) { 
		// 기존의 수 [i]를 따로 기억하고
		int temp = arr[i];
		
		// 기존 [i] 자리에 [j]의 값을 넣으며
		arr[i] = arr[j];
		
		// 저장해두었던 [i]의 값을 다시 [j]의 자리에 넣는다.
		arr[j] = temp;
	}
	
	// 탐색 
	// 정수 배열과 시작 인덱스를 인자로 받는다.
	public static int indexLowest(int[] arr, int start) {
		
		// 시작인덱스를 따로 기억하고 
		int low = start;
		
		// 받은 배열의 크기만큼 반복을하며
		for (int i = start; i < arr.length; i++) {
			
			// 만약 현재의 수가 현재 지정된 최소값보다 작다면
			if ( arr[i] < arr[low] ) {
				
				// low의 인덱스는 현재의 인덱스가 된다.
				low = i;
			}
		}
		// 반복문이 끝나고 제일 작은 값을 가진 인덱스가 반환된다.
		return low;
	}
	
	
	// 정렬기능을하는 메서드 미 정렬 정수 배열을 인자로 받는다.
	public static int[] sort(int[] arr) {
		
		// 받은 배열의 크기만큼 반복을하며
		for (int i = 0; i < arr.length; i++) {
			
			// 그 반복의 첫 숫자를 시작으로 받은 배열과 함께 현재의 인덱스부터 탐색한다.
			int j = indexLowest(arr, i);
			
			// 현재의 인덱스에 탐색 결과로 나온 제일 작은 값과 현재 인덱스의 값을 서로 바꾼다. 
			swapElements(arr, i, j);
		}
		
		return arr;
	}
	
	
	public static void main(String[] args) {
		
		int[] test = {3,5,2,9,7,8,1};
		
		int[] result = SelectionSort.sort(test);
		
		for (int i = 0; i < result.length; i++) {
			System.out.print(result[i]);
			// = > 1235789
		}
	}

}
public class SelectionSort {

	// 두 인덱스의 벨류를 바꾸는 메서드
	// 정렬할 정수 배열과 서로 교체할 인덱스 i, j 를 인자로 받는다
	public static void swapElements(int[] arr, int i, int j) { 
		// 기존의 수 [i]를 따로 기억하고
		int temp = arr[i];
		
		// 기존 [i] 자리에 [j]의 값을 넣으며
		arr[i] = arr[j];
		
		// 저장해두었던 [i]의 값을 다시 [j]의 자리에 넣는다.
		arr[j] = temp;
	}
	
	// 탐색 
	// 정수 배열과 시작 인덱스를 인자로 받는다.
	public static int indexLowest(int[] arr, int start) {
		
		// 시작인덱스를 따로 기억하고 
		int low = start;
		
		// 받은 배열의 크기만큼 반복을하며
		for (int i = start; i < arr.length; i++) {
			
			// 만약 현재의 수가 현재 지정된 최소값보다 작다면
			if ( arr[i] < arr[low] ) {
				
				// low의 인덱스는 현재의 인덱스가 된다.
				low = i;
			}
		}
		// 반복문이 끝나고 제일 작은 값을 가진 인덱스가 반환된다.
		return low;
	}
	
	
	// 정렬기능을하는 메서드 미 정렬 정수 배열을 인자로 받는다.
	public static int[] sort(int[] arr) {
		
		// 받은 배열의 크기만큼 반복을하며
		for (int i = 0; i < arr.length; i++) {
			
			// 그 반복의 첫 숫자를 시작으로 받은 배열과 함께 현재의 인덱스부터 탐색한다.
			int j = indexLowest(arr, i);
			
			// 현재의 인덱스에 탐색 결과로 나온 제일 작은 값과 현재 인덱스의 값을 서로 바꾼다. 
			swapElements(arr, i, j);
		}
		
		return arr;
	}
	
	
	public static void main(String[] args) {
		
		int[] test = {3,5,2,9,7,8,1};
		
		int[] result = SelectionSort.sort(test);
		
		for (int i = 0; i < result.length; i++) {
			System.out.print(result[i]);
			// = > 1235789
		}
	}

}

'Java > Data Structures' 카테고리의 다른 글

3. 알고리즘 분석  (0) 2021.03.16
2. List Interface?  (0) 2021.03.16
1. 자료구조 왜?  (0) 2021.03.16