인프런 커뮤니티 질문&답변

cksgur님의 프로필 이미지
cksgur

작성한 질문수

홍정모의 따라하며 배우는 C언어

11.8 문자열의 포인터를 정렬하기

3:00쯤에 selctionSort함수를 이런식으로 작성해도 괜찮나요??

해결된 질문

작성

·

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() 함수를 호출하게 됩니다.



    따배씨 커뮤니티에서 '선택 정렬' 키워드로 질문&답변을 검색해보시면,
    다른 분들의 구현 내용 및 일반적인 선택 정렬의 구현 내용에 대해서 점검드린 답변들이 있으니 참고해보시면 더욱 도움이 많이 되실 것 같습니다.

     

cksgur님의 프로필 이미지
cksgur

작성한 질문수

질문하기