Visual Studio/C 실전

C언어 버블 정렬

낙락장송s 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;        //이 부분은 교환하기 위해 임시 변수를 선언하고, 임시 변수에 값을 저장하여 나중에 교환하기 위함입니다.
   }
  }
 }