본문 바로가기

IT프로그래밍

C언어 선택 정렬 / C언어 선택 정렬 소스 / C언어 선택 정렬 설명

#include <stdio.h>

#define Number_Size 5                 //define 통해 Number_Size 5라고 정의

/*

선택 정렬

*/

main()

{

        int number[Number_Size] = { 5, 90, 1, 88, 15 };              //정렬하려는 대상

        int i, j;

        int count = 1;

        printf("현재 숫자 출력 : ");

        for (i = 0; i < Number_Size; i++)                    //원래 숫자배열 출력

        {

               printf("%d ", number[i]);

        }

 

        for (i = 0; i < Number_Size-1; i++)                  //선택 정렬, 오름차순

        {

              

               for (j = i+1; j < Number_Size; j++)

               {

                       if (number[i] > number[j])

                       {

                              int temp;                                            //숫자의 자리를 바꾸기 위한 임시 변수

                              temp = number[i];

                              number[i] = number[j];

                              number[j] = temp;

                       }

 

                       printf("\n%d번째 정렬 수행 : ", count++);

                       for (int k = 0; k < Number_Size; k++)

                       {

                              printf("%d ", number[k]);

                       }

                       printf("\n");

               }

              

        }

 

 

        printf("\n정렬 최종 출력 : ");

        for (i = 0; i < Number_Size; i++)

        {

               printf("%d ", number[i]);

        }

        printf("\n");

}


결과



설명


선택 정렬은 하나,하나 비교를 통해 값을 정렬 합니다.

오름차순(작은수가 처음) 선택 정렬을 기준으로 설명 드리자면

우선 배열에 들어있는 값 중, 제일 작은게 첫번째로 와야 겠죠 ?

그럼 배열의 0번 인덱스의 수부터 자기 자신을 제외한 수와 비교를 수행합니다.

그림에서 보는것처럼 제일 처음수를 기준으로 4번의 연산(총 5개의 크기를 가진 배열에서 자기 자신을 제외)을 수행합니다.

그렇게 되면 배열에 첫번째에 제일 작은 값이 들어오겠죠?

그럼 정렬이 수행된것입니다.

이제 1번 인덱스를 기준으로 같은 연산을 수행합니다.

0번에는 제일 작은수가 들어가 있으니 할 필요가 없고, 자기자신과도 할 필요가 없으니 자기보다 큰 인덱스의 값들과 비교를 통해 두번째로 작은수가 1번 인덱스로 들어가 지게 되겠죠?

연산의 수는 위의 식과 같습니다.

배열의 크기가 5라면 총 10번의 연산을 수행합니다.

이상 선택정렬 이었습니다.