내장형 하드웨어/C언어

알고리즘 - 선택정렬

동화다아아 2011. 10. 26. 15:12

[선택 정렬법]

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 ;
}


- 실행 결과 (내림차순)

- 실행 결과 (오름차순)