본문 바로가기
프로그램/C언어 1000제

C언어 178제] 버블정렬

by 건티 2024. 10. 31.
728x90

출처 : 반크_세계유산 경복궁

 

문제]

아래의 조건에 맞는 프로그램을 작성하시오.

 

조건]

1. 임의의 3자리수 N개를 무작위로 산출하시오.(3<=N<=100)

2. 임의의 수는 중복되지 않게 산출하시오.

3. 버블정렬을 사용하여 내림차순으로 정렬하시오.

4. 정렬 전 값과 정렬 후 값을 출력하시오.

5. 한라인에 10개씩 출력하시오.

6. 기타사항은 프로그램의 전반적인 로직과 사용 프로그램의 특성을 고려하여

    프로그램을 작성하시오.

 

입력 예)

3

 

출력 예)

버블정렬 전]

111 555 333

 

버블정렬 후]

555 333 111

 

참고풀이]

#include <stdio.h>
#include <stdlib.h> //malloc(), free(), srand(), rand()
#include <time.h>  //time()

void BubbleSort(int n, int *R)
{
   int a, b;
   int imsi;
   int cnt;

   for(a=0;a<n;a++)
   {
      for(b=0;b<n-1; b++)
      {
         if(R[b]<R[b+1])
         {
            imsi=R[b+1];
            R[b+1]=R[b];
            R[b]=imsi;
         }
      }
   }
}

int main()
{
   int N;
   int i,j; //인덱스 또는 반복변수 

   //무작위 수를 실행할 때마다 다른 값이 나오도록 설정한다.
   srand(time(NULL));

   //정렬할 자료의 개수를 입력받는다. 
   scanf("%d",&N);
   if(N>=3 && N<=100)
   {
      //정렬할 자료를 넣을 변수를 선언한다.
      int *M=(int *) malloc(sizeof(int)*N);
      //선언한 변수에 자료를 넣는다.
      for(i=0;i<N;i++)
      {
         M[i]=rand()%1000;
         //생성된 자료가 3자리의 수인 지 체크한다.
         if(M[i]>99)
         {
            //생성된 자료가 중복되었는 지 체크후 저장한다.
            for(j=0;j<i;j++) 
               if(M[i]==M[j])
               {
                  i--;
                  break;
               }
         }
         else//생성된 수가 3자리의 수가 아니면 인덱스 값을 1줄인다.
            i--;
      }

      //정렬전 자료를 한줄에 10개씩 출력한다. 
      printf("버블 정렬전]\n");
      for(i=0;i<N;i++)
         if((i+1)%10) printf("%4d",M[i]);
         else printf("%4d\n",M[i]);

      //정렬후 결과출력
      BubbleSort(N, M);

      printf("\n\n버블 정렬후]\n");
      for(i=0;i<N;i++)
         if((i+1)%10) printf("%4d",M[i]);
         else printf("%4d\n",M[i]);

 

      //동적메모리를 해제한다.

      free(M);
   }

   return 0;
}

 

 

참고풀이 결과]

 

 

 

 

 

대한민국의 아름다운 영토, 독도의 봄

 

반응형

댓글