• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

선택정렬 관하여 다른 코드

24.01.29 03:26 작성 24.01.29 03:26 수정 조회수 93

1

 

 

이 원리도 맞을까요? 부등호만 반대로 바꾸면 내림차순이 되는 것 같은데 비효율적이진 않은지 궁금합니다.

답변 1

답변을 작성해보세요.

1

Soobak님의 프로필

Soobak

2024.01.29

안녕하세요, 질문&답변 도우미 Soobak 입니다.

 

일반적인 선택 정렬 코드에서 원소의 비교 부분의 부등호를 반대로 바꾼다면 내림차순이 되는 것은 맞습니다.

하지만, 질문자님께서 작성하신 코드 일부에서 선택 정렬에 대해 잘못 구현하신 부분이 있습니다.

내부 반복문 (j 반복문) 에서, ji + 1 부터 시작해서 배열의 끝까지 진행해야 합니다.
그리고, 최소값을 찾은 다음에 마지막으로 i 위치의 값과 교환해야 합니다.

 

예시

#include <iostream>
using namespace std;

int main()
{
    int scores[4] = {92, 45, 70, 60};

    for(int i = 0; i < 4; i++)
    {
        // 가장 작은 요소의 인덱스를 찾기 위해 i로 초기화
        int min_index = i;
        for(int j = i + 1; j < 4; j++)
        {
            if (scores[j] < scores[min_index]) // 오름차순 정렬을 위한 조건
                min_index = j;
        }

        // i번째 위치와 가장 작은 요소 위치를 교환
        int temp = scores[i];
        scores[i] = scores[min_index];
        scores[min_index] = temp;
    }

    // 정렬된 배열 출력
    for(int i = 0; i < 4; i++)
        cout << scores[i] << " ";

    return 0;
}