ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C언어 선택 정렬
    Visual Studio/C 실전 2015. 3. 31. 11:17

    예를 들어서, 4, 1, 3, 2, 5라는 숫자들이 있는데, 순서를 맞추기 위해 정렬하는 기법 중에 하나입니다.

    1회전, 맨 앞의 숫자와 그 다음 숫자를 비교합니다.

    1, 4, 3, 2, 5    -> 4가 1보다 크므로 두 숫자의 위치를 변경합니다.

    1, 4, 3, 2 ,5    -> 1이 3보다 작으므로 그대로 둡니다.

    1, 4, 3, 2, 5    -> 1이 2보다 작으므로 그대로 둡니다.

    1, 4, 3, 2, 5    -> 1이 5보다 작으므로 그대로 둡니다.

    2회전, 두 번째 숫자와 그 다음 숫자를 비교합니다.

    1, 3, 4, 2 ,5    -> 4가 3보다 크므로 두 숫자의 위치를 변경합니다.

    1, 2, 4, 3, 5    -> 3이 2보다 크므로 두 숫자의 위치를 변경합니다.

    1, 2, 4, 3, 5    -> 2가 5보다 작으므로 그대로 둡니다.

     이런 식으로 마지막 까지 반복합니다.

    이제 10개의 숫자를 입력받아 선택정렬 하는 프로그램의 예제를 보겠습니다.

    #include <stdio.h>
    #define MAX 10

    int i;
    void selection();  //selction 함수 선언
    int data[MAX];

    main() {
     for(i = 0; i < MAX; i++){
      printf("%d번째 값을 입력하세요 : ",i+1);
      scanf("%d", &data[i]);

    }

     printf("입력 받은 값 : ");
     for (i = 0; i < MAX; i++)
     printf("%d ", data[i]);
     selection();  //selection 함수 호출
    }
    void selection() {
     int x, y, temp;
      for(x = 0; x < MAX-1; x++) { // x가 10일 때 y와 비교할 내용이 없으므로 y보다

                               //작아야 합니다.
       y = x + 1;
       for(y = x + 1; y < MAX; y++) { 
        if(data[x] > data[y]) {
        temp = data[x];
        data[x] = data[y];
        data[y] = temp;
        }
       }
     }
      printf("\n최종 결과값 : ");
     for(x = 0; x < MAX; x++)
      printf("%d ", data[x]);
      printf("\n");
    }

     먼저 입력받은 10가지의 숫자를 저장할 배열 data를 선언합니다.

    그리고 각 숫자를 비교하면서 배열에 저장되어 있는 숫자를 교환을 해야 하는데, 바로 교환을 하게 되면 하나의 값은 변경이 되지 않습니다.

    그래서 temp 변수를 선언하여 임시적으로 교환할 값을 저장하여 교환을 해야 합니다.

        temp = data[x];
        data[x] = data[y];
        data[y] = temp;

     

     

    댓글

Designed by Tistory.