Koronba
21
2022-02-24 14:05:54
3
2122

c언어 선택정렬 코드 질문입니다.


안녕하세요? 코딩 초보자입니다.

매일 책에서 보던 코드만 따라하다가, 어떻게 혼자 구현할 수는 없는지 생각해보기 위해 선택정렬 코드부터 혼자 코딩을 시작해보았습니다.

결과로 보자면 선택정렬이 되었으나, 제가 구현한 알고리즘이 맞는지, 또한 오류는 없는지 검토해보기 위해 확인 차 Q&A에 올려보았습니다.


#include <stdio.h>

#define SIZE 10

int main (void)
{
    int array[SIZE] = {23,96,35,42,81,19,8,77,50,64} ;
    int i;
    int j;
    int temp;
    
    for(i=0;i<SIZE - 1;i++)
    {
        for(j=i+1;j<SIZE-1;j++)
        {
            temp = array[i];
            if(array[i]>array[j])
            {
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
        for(i=0;i<SIZE-1;i++)
        {
            printf("%d ",array[i]);
        }
    return 0;
}


0
  • 답변 3

  • lliijjiijjl
    104
    2022-02-24 14:16:42 작성 2022-02-24 15:39:44 수정됨

    코드 잘 짜셨네요!! 
    다만 개선할 부분이 있어 보입니다.

    이중루프 돌리실때 내부 루프와 외부 루프의 범위가 동일하네요.
    그런데 외부 루프의 마지막 회차때는 이미 정렬이 완료되어 있겠죠?
    그리고 그 경우에 j = 10이 될텐데  인덱스 값이 10인 원소는 없습니다. 

    즉, 마지막 루프는 돌 필요도 없고 오류만 야기할 수 있기 때문에 다음과 같이 고쳐주시면 될 것 같네요.

     for(i=0;i<SIZE - 2;i++)


    * 아 제가 코드를 잘못 봤군요. 신히님 말씀대로 j문을 j < SIZE로 바꿔야겠네요. 

  • 신히
    958
    2022-02-24 14:18:16

    우선 두군데 개선사항이 보입니다. temp 할당은 if 문 내부에 두어 의미없는 자원사용을 줄이시고요

    SIZE -1을 해서 마지막 아이템이 누락되니 j for 문을 수정해야될것으로 보입니다.


    마지막 for 문장도 9개 항목만 출력하네요.

  • Koronba
    21
    2022-02-24 14:39:24

    여러분들 덕분에 수정해서 결과 출력이 잘 되네요. 정말 감사드립니다.

    계속해서 파고들어서 도와주신 분들 처럼 저같은 코딩 초보자들 도와주는게 목표가 되었습니다.. 열심히 하겠습니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.