1. 문제
선택정렬
2. 나의 풀이
선택 정렬은 배열의 최솟값을 찾아 앞으로 보내고 그 다음 최솟값을 찾아 그 다음칸으로 보내는 정렬이다.
즉 계속 최솟값을 찾아내 순서대로 정렬시킨다.
이중 for문을 돌면 된다.
필요한 변수들은
최솟값을 저장할 min
최솟값의 인덱스를 저장할 index
1. min, index가 필요하다
2. 두번 째 for문이 끝나면 최솟값과 맨 앞을 swap 한다.
편의상 나의 코드와 강의 코드를 같이 업로드
3. 강의
package Sort;
import java.util.*;
//최솟값을 탐색해 앞에 배치하는 정렬이다.
public class Sort_01_selection {
public static int[] solution(int[] arr) {
//내가 선택정렬 원리만 보고 짠 코드
for (int i = 0; i < arr.length; i++) {
int min = arr[i]; //min을 갱신해줘야한다!
int index = i; //최솟값의 인덱스
for (int j = i+1; j < arr.length; j++) { //최솟값을 찾는 과정
if (arr[j] < min) {
min = arr[j];
index = j;
}
}
//저장된 min와 index를 위치 swap
int tmp = arr[i];
arr[i] = min;
arr[index] = tmp;
}
/* //강의 코드
//강의 처럼 굳이 min 값을 저장하지 않고 최솟값의 인덱스만 알고 swap하면 더 간결하다.
for (int i = 0; i < arr.length; i++) {
int index = i;
for (int j = i + 1; j < arr.length; j++) {
if(arr[j] < arr[i]) index = j;
}
int tmp = arr[i];
arr[i] = arr[index];
arr[index] = tmp;
}*/
return arr;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) arr[i] = sc.nextInt();
for (int x : solution(arr)) System.out.print(x + " ");
}
}
4. 얻어갈 점
1. for문이 끝날 때 필요한 값들을 다시 초기화 해주는 걸 잊지말자.
'알고리즘 > Sorting and Searching(정렬, 이분검색, 결정알고리즘' 카테고리의 다른 글
6. 장난꾸러기 (1) | 2023.10.28 |
---|---|
5. 중복 확인 (1) | 2023.10.25 |
4. ★★ Least Recently Used (LRU) (0) | 2023.10.25 |
3. 삽입 정렬 (0) | 2023.10.25 |
2. 버블 정렬 (0) | 2023.10.25 |