23.08.13 13:40 작성
·
273
1
제가 먼저 풀고, 풀이를 보려 했는데 어지러워서
제가 한게 좀더 간단한거 같아 혹시 다른 분들 의견이 궁금하여 여쭤 볼겸 평가 부탁드립니다
답변 1
1
안녕하세요, 답변 도우미 Soobak 입니다.
먼저, 인프런 질문 답변 게시판에서는 코드 리뷰를 제공하지 않습니다.
따라서, 코드 리뷰에 대해서는 선생님의 다른 커뮤니티를 통해 다른 수강생분들과 토론을 나누시는 것을 권장드립니다.
링크를 첨부드립니다.
- 네이버 카페 - 홍정모 연구소 (링크)
- 디스코드 - 홍정모 연구소(링크)
다만, 질문을 읽은 참에 간단히 리뷰를 드려봅니다.
선택 정렬 알고리즘에 대한 기본 원리는 다음과 같습니다.
1. 첫 번째 원소부터 마지막 항목까지 가장 작은(혹은 큰) 원소를 찾습니다.
2. 해당하는 원소를 첫 번째 원소와 교환합니다.
3. 두 번째 원소부터 마지막 원소까지 가장 작은(혹은 큰) 원소를 찾습니다.
4. 해당하는 원소를 두 번째 원소와 교환합니다.
5. 이 과정을 배열의 끝까지 반복합니다.
따라서, 구현하신 코드에는 몇 가지 문제점이 있습니다.
1. j
의 초기값이 (i == 4) ? i - 1 : 0;
이라는 조건으로 시작하는 것은 선택 정렬의 개념과는 맞지 않습니다. 선택 정렬에서는 항상 현재 위치부터 배열의 끝까지 가장 작은(혹은 큰) 값을 찾아야 합니다.
2. 내부의 while()
반복문은 현재 위치 i
보다 작은 모든 값과 현재 위치의 값을 교환하고 있습니다.
따라서, 이 또한 선택 정렬의 원리와 맞지 않습니다.
질문자님의 코드를 기반으로 기본적인 선택 정렬 알고리즘의 형태를 구현해보면 다음과 같습니다.
const int length = 5;
int array[length] = {3, 5, 2, 1, 4};
for (int i = 0; i < length - 1; i++) {
int minIndex = i; // 가장 작은 값의 인덱스를 저장할 변수
for (int j = i + 1; j < length; j++) {
if (array[j] < array[minIndex]) {
minIndex = j; // 더 작은 값을 찾았으면, 그 위치를 저장
}
}
// i 위치의 값과 가장 작은 값을 교환
int temp = array[i];
array[i] = array[minIndex];
array[minIndex] = temp;
}