데이터가 있고 그데이터를 처리하는 방법은 많이 있습니다 데이터를 처리하는 방법중 정렬을 하는 방법에 대하여 다루어 보겠습니다

데이터의 정렬이란 특정한 규칙에의해 데이터를 재배열하는것을 뜻하는데 숫자의 대소를 가지고 내림 혹은 오름차순으로 정리하는것이 기본입니다 그리고 정렬에도 여러가지 종류가 있는데 선택정렬법을 사용한 정렬을 해보도록 하겠습니다

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

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


예를들어 1 2 3 4 5의 데이터가 있으면
1을 중심으로 1과2 1과3 1과4 1과5등으로 비교를 하는것이 선택 정렬법입니다

즉 1이 기준이라면
1 2 3 4 5

1 2 3 4 5

1 2 3 4 5

비교하고 대소를 구분하여 자리를 바꾸게 됩니다 선택정렬이외에 버블 정렬이란것도 있습니다

.소스구상
:소스를 작성하기전에 어떻게 구현 할것인지 생각해보았습니다

1)입력받는 데이터의 갯수를 정할수 있도록한다 -변수
2)입력받는 데이터를 원하는 수로 입력한다  -scanf
3)원하는 지점(데이터)부터 정렬해나간다    -변수 선언및 for
4)내림차순 오름차순을 선택하도록 한다      -switch()

.정렬
정렬의 기본은 값을 저장할 temp 변수와 데이터 A1 A2를 비교하여 서로의 값을 교환하는 것입니다
if(A1<A2)
{
    temp = A1;
    A1 = A2;
    A2 = temp;
}
여기서 선택 정렬을 적용한다면
A1의 값은 그대로 둔체  A2를 가리키는 값을 바꾸어주면 됩니다
A1 < A(i)  //i++

결과보기>>
1번 배열부터 오름차순 sort 경우


3번 배열부터 오름차순 sort 경우
앞에 1 과 2는 정렬되지 않았습니다












소스보기>>
#include <stdio.h>

int main()
{
  int iCnum;
  int iSp;
  int i;
  int j;
  int iSw;

  int temp;
  unsigned int iBuf[];

  printf("The number of data :");
  scanf("%d",&iCnum);

  fflush(stdin);
  printf("%d Data Write!\n",iCnum);  
  for(i=0;i<iCnum;i++)
  {
    printf("Data in [%d]: ",i);
    scanf("%d",&iBuf[i]);
    fflush(stdin);
  }
  
  printf("Sort Point in: ");
  scanf("%d",&iSp);
  fflush(stdin);
  
  iSp--;

  printf("Decrease 1 / Increase 2: ");
  scanf("%d",&iSw);

  switch(iSw)
  {
    case 1:
      for(j=iSp;j<iCnum;j++)
      {
        for(i=0;i<iCnum-iSp;i++)
        {  
          if(iBuf[iSp]<iBuf[iSp+i])
          {
            temp = iBuf[iSp];
            iBuf[iSp] = iBuf[iSp+i];
            iBuf[iSp+i] = temp;
          }
        }
        iSp++;
      }
      break;
    
    case 2:
      for(j=iSp;j<iCnum;j++)
      {
        for(i=0;i<iCnum-iSp;i++)
        {  
          if(iBuf[iSp]>iBuf[iSp+i])
          {
            temp = iBuf[iSp];
            iBuf[iSp] = iBuf[iSp+i];
            iBuf[iSp+i] = temp;
          }
        }
        iSp++;
      }
      break;
  }

  for(i=0;i<iCnum;i++)
  {
    printf(" %d ",iBuf[i]);
  }
  printf("\n");
  return 0;
}



Posted by mantwo