카테고리 보관물: 알고리즘

선택정렬(Selection Sort)

선택 정렬(Selection Sort)이란?

1. 리스트의 최솟값을 찾는다.

2. 그 값을 리스트의 맨 앞자리 값과 교체한다.
(맨 앞자리 값이 최솟값일 경우 Pass)

3. 1,2 과정을 정렬이 완료 시점까지 반복.

출처 : Naver 이미지

선택 정렬 C코드

#include<stdio.h>
int main()
{
    int A[10], i, j, c, k;
    for(i=0 ; i<10 ; i++)
    {
        scanf("%d",&A[i]);        //숫자 10개를 입력 받는다.
    }
    for(i=0 ; i<9 ; i++)              //맨 앞자리 숫자를 잡아준다.
    {
        for(j=i+1 ; j<10 ; j++)//맨 앞자리 숫자를 제외한 리스트 값을 비교한다.
        {
            if(A[i] > A[j]) // 최솟값이 순서대로 Swap한다.
            {
                c = A[i];
                A[i] = A[j];
                A[j] = c;
            }
        }
        printf("정렬 %d회 : ",i+1); //정렬 과정을 출력한다.
        for(k=0;k<10;k++)
            printf("%d ",A[k]);
        printf("\n");
    }
}

선택 정렬 알고리즘 핵심

for(i=0;i<9;i++)              
{
   for(j=i+1;j<10;j++) //j=i+1 초기 값 설정으로 정렬된 리스트에 영향 X
   {
       if(A[i]>A[j])//조건 식에 따라 오름차순 또는 내림차순으로 정렬 가능.
       {
           c=A[i];     //모든 정렬에서 핵심 부분이다.
           A[i]=A[j];  //각 칸마다 있는 리스트 숫자를 서로 Swap 위해서는
           A[j]=c;     //변수c를 사용하여 리스트의 숫자를 보관한다. 
       }
    }
}

선택 정렬 추가 알고리즘(함수)

int SelectionSort(int SortList, int n)
{
   int i, j, min = 0, sp = 0;
   for (i = 0; i < n - 1; i++)
   {
      min = i;
      for (j = i + 1; j < n; j++)
      {
	if (SortList[min] > SortList[j])
	min = j;
      }
      //리스트 중 가장 작은 값과 SortList[i]값 Swap Code.
      sp = SortList[i];
      SortList[i] = SortList[min];
      SortList[min] = sp;
      }
}

선택 정렬 알고리즘을 함수(SelectionSort)로 사용하는 방법도 있습니다.

활동을 하면서 글의 주제 선정과 방향성에 대해서도 아직 부족하다고 느낍니다.
프로그래밍 언어와 관련된 코딩 공부와 전공에 관한 실습에 대해서도 추가적으로 공부하여 글을 올려볼 예정입니다. 저의 글을 보시고 편하게 피드백 해주시면 감사하겠습니다.