해결된 질문
작성
·
102
1
void selectionSort(char* arr[], int n)
{
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (strcmp(arr[j], arr[i]) < 0)
swap(&arr[i], &arr[j]);
}
}
}
답변 1
2
안녕하세요, 질문&답변 도우미 Soobak 입니다.
void selectionSort(char* arr[], int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (strcmp(arr[j], arr[j]) < 0)
swap(&arr[i], &arr[j]);
}
}
}
: 기본적인 성택 정렬 알고리즘의 원리와 비교했을 때 다음과 같은 사항들에 대해서 고려 및 수정해보시면 좋을 것 같습니다.
중복 비교
: 두 번째 for()
문은 배열의 모든 원소를 매번 비교하게 됩니다.
선택 정렬에서는 각 반복마다 현재 위치 이후의 원소들만 비교하여 최소값(또는 최대값)을 찾는 것이 일반적입니다.
비효율적인 swap()
: if()
조건에 따라 swap()
함수를 호출하는 부분에서, 최소값을 찾은 후에 한 번만 위치를 변경하는 것이 아니라, 조건에 맞을 때마다 불필요하게 여러 번 swap()
함수를 호출하게 됩니다.
따배씨 커뮤니티에서 '선택 정렬' 키워드로 질문&답변을 검색해보시면,
다른 분들의 구현 내용 및 일반적인 선택 정렬의 구현 내용에 대해서 점검드린 답변들이 있으니 참고해보시면 더욱 도움이 많이 되실 것 같습니다.