블로그 이미지
하루, 글. 그림. 영상매체. 표현을 도와주는 기기들. 도전 중. 동화다아아
    동화다아아

    카테고리

    분류 전체보기 (176)
    잡담 (1)
    IT 기기-리뷰&뉴스 (7)
    리뷰 - 도서 (1)
    리뷰 - 영상 (0)
    리뷰 - 그림/음악 (1)
    내장형 하드웨어 (163)
    Total
    Today
    Yesterday

    [선택 정렬법]

    5
    개의 데이터를 입력하여 배열에 기억시킨 후 선택 정렬법을 사용하여 오름차순으로 정렬하라.


    참고)

    선택 정렬법(selection sort)은 가장 앞에 있는 데이터 A1부터 시작하여 모든 데이터 A2~An를 차례대로 비교하면서 그 위치에 놓여질 데이터를 결정한 후, 그 다음 데이터 A2로 이동하여 같은 방법을 적용한다.

    처음 데이터 A1를 그 다음 번 째 데이터와 비교하여 오름차순일 때는 A1이 더 크면 맞바꾸고 내림차순일 때는 A1이 더 작으면 서로 맞바꾼다.


    #include<stdio.h>

    void
     SelectSort(unsigned int *A, unsigned int iNum, unsigned int flag);

    int main()
    {
      unsigned int A[100]; // 숫자가 저장되는 배열
      unsigned int iCnt; // 반복문을 위한 변수
      unsigned int iNum; // 정렬 범위를 저장하는 변수
      unsigned int flag; // 분기를 선택하는 변수
      
      // 정렬할 숫자의 개수(범위)를 입력받는다.
      printf("정렬할 숫자의 개수를 입력하세요: ");
      scanf("%d"&iNum);
      // 정렬 범위 만큼의 숫자를 입력받는다.
      printf("%d개의 숫자를 입력하세요: ", iNum);
      for(iCnt=0; iCnt<iNum;++iCnt)
      {
        scanf("%d"&A[iCnt]);
      }
      // 오름차순 or 내림차순 선택
      printf("오름차순이면 1, 내림차순이면 2를 입력하세요: ");
      scanf("%d"&flag);
      // 선택에 따른 분기
      if(flag==1)
      {
        // 오름차순
        printf("\n- 오름차순일 경우 -\n");
        SelectSort(A, iNum, flag);
      }
      else
      {
        // 내림차순
        printf("\n- 내림차순일 경우 -\n");
        SelectSort(A, iNum, flag);
      }
      return 0;
    }
    void SelectSort(unsigned int *A, unsigned int iNum, unsigned int flag)
    {
      int Temp; // 임시 저장 변수
      unsigned int iCnt;
      unsigned int iCnt2;
      unsigned int iCheck = 0// 계산 횟수를 저장한다.
      // 정렬되기 전에 저장된 숫자를 출력한다.
      for(iCnt=0;iCnt<iNum;++iCnt)
      {
        printf("%d, ", A[iCnt]);
      }
      printf("\n");
      // 정렬을 시작한다.
      for(iCnt2=0;iCnt2<(iNum-1);++iCnt2)
      {
        for(iCnt=iCnt2;iCnt<(iNum-1);++iCnt)
        {
          if(flag==1// 오름차순일 경우
          {
            if(A[iCnt2] > A[iCnt+1])
            {
              Temp = A[iCnt2];
              A[iCnt2] = A[iCnt+1];
              A[iCnt+1= Temp;
            }
          }
          else // 내림 차순일 경우
          {
            if(A[iCnt2] < A[iCnt+1])
            {
              Temp = A[iCnt2];
              A[iCnt2] = A[iCnt+1];
              A[iCnt+1= Temp;
            }
          }
          ++iCheck;
        }
      }
      // 정렬된 결과를 출력한다.
      for(iCnt=0;iCnt<iNum;++iCnt)
      {
        printf("%d ->", A[iCnt]);
      }
      // 총 계산 횟수를 출력한다.
      printf("계산횟수 : %d\n", iCheck);
      
      return ;
    }


    - 실행 결과 (내림차순)

    - 실행 결과 (오름차순)

     
    Posted by 동화다아아
    , |

    최근에 달린 댓글

    최근에 받은 트랙백

    글 보관함