ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C언어 버블 정렬
    Visual Studio/C 실전 2015. 3. 31. 16:15

    버블 정렬은 주어진 파일에서 인접한 두 개의 숫자를 비교하여 그 크기에 따라서 서로 교환하는 방식입니다.

    9, 6, 2, 5, 7 이란 숫자가 있습니다.

    첫 번째 회전

    6, 9, 2, 5, 7     -> 9가 6보다 크므로 서로 교환합니다.

    6, 2, 9, 5, 7     -> 9가 2보다 크므로 서로 교환합니다.

    6, 2, 5, 9, 7     -> 9가 5보다 크므로 서로 교환합니다.

    6, 2, 5, 7, 9     -> 9가 7보다 크므로 서로 교환합니다.

    두 번째 회전

    2, 6, 5, 7, 9     -> 6이 2보다 크므로 서로 교환합니다.

    2, 5, 6, 7, 9     -> 6이 5보다 크므로 서로 교환합니다.

    2, 5, 6, 7, 9     -> 6이 7보다 작으므로 그대로 둡니다.

    2, 5, 6, 7, 9     -> 7이 6보다 작으므로 그대로 둡니다.

     

    이렇게 맞을 때 까지 회전 시켜줍니다.

    이제 10개 값을 입력 받아 버블 정렬하는 예제를 보겠습니다.

    }
    #define MAX 10

    int r;
    int data[MAX];
    void bubble();         //버블 함수 선언

    main(){

     for(r = 0; r < MAX; r++) {
      printf("%d번째 숫자를 입력하세요 : ", r+1);
      scanf("%d", &data[r]);
     }
     printf("입력 받은 값 : ");
     for(r = 0; r < MAX; r++)
      printf("%d ", data[r]);
     printf("\n");

     bubble();              //버블 함수 호출

    }

    void bubble(){
     int x, y, temp;
     
     for(x = 0; x < MAX; x++){
      for(y = 0; y < MAX-1-x ; y++){
       if(data[y] > data[y+1]){
        temp = data[y];
        data[y] = data[y+1];
        data[y+1] = temp;
       }
      }
     }
     printf("최종 결과 값 : ");
     for(r = 0; r < MAX; r++)
     printf("%d ", data[r]);
     printf("\n");

     함수의 동작을 살펴보겠습니다.

    버블 함수를 선언하여 버블 함수에서 동작 시켜 메인 함수에서 호출 시켜서 출력 시키게 끔 코딩 했는데,

    int x, y, temp;
     
     for(x = 0; x < MAX; x++){
      for(y = 0; y < MAX-1-x ; y++){  //처음 비교를 한 이후 다음 수를 비교해야 하기 때문에 x값 만큼 줄여나갑니다.
       if(data[y] > data[y+1]){   //비교 대상 숫자가 선택 정렬과는 다르게 근접한 숫자와 비교를 해야 하기 때문에 비교 대상 항목 보다 1만큼 

                                            //큰 숫자를 비교해야 합니다. 그래서 y+1을 넣어줍니다.
        temp = data[y];
        data[y] = data[y+1];
        data[y+1] = temp;        //이 부분은 교환하기 위해 임시 변수를 선언하고, 임시 변수에 값을 저장하여 나중에 교환하기 위함입니다.
       }
      }
     }

     

    댓글

Designed by Tistory.