본문 바로가기

IT프로그래밍

c언어버블정렬 / 버블 정렬 / c언어 버블 정렬 / 버블 소팅 / c언어 버블 소팅 / 버블정렬

버블정렬이란 ?

버블정렬은 큰 수가 떠오르는 것처럼 보여서 지어진 이름이라고 알고 있습니다.

왼쪽을 바닥, 오른쪽을 수면이라고 한다면 큰 수가 점차 수면으로 떠오르는 거죠.


버블정렬 알고리즘


버블 정렬은 위의 그림처럼 제일 앞의 수부터 2개씩 비교를 합니다.

앞의 수가 뒤의 수보다 더 크면, 자리를 바꿔줍니다.


검은색 볼펜으로 1, 2, 3

빨간색 볼펜 4,5

파란색 볼펜 6

이렇게 총 6단계를 거칩니다.


버블 정렬의 복잡도는 ( n(n-1) )/2를 갖게됩니다. 선택정렬이랑 같죠 ?



버블정렬 소스


#include <stdio.h>

 

/*

        버블 정렬

*/

main()

{

        int number[] = {5,3,4,1,2};   //숫자 입력

        int max = sizeof(number)/sizeof(int) - 1;    //최종 인덱스

        int count = 0; //단계 구분 count

 

        /*

        number_size 주지 않고 sizeof(number)/sizeof(int) 사용하였다.

        sizeof(number) = number라는 변수를 갖는 배열에 할당되어 있는 크기를 반환해준다.

        int 4바이트, 배열에 10개의 변수가 저장되어 있다면 40 리턴해준다.

        따라서 sizeof(int) 나누어주었다.

        ※자료형은 컴퓨터 운영체제에 따라 다를 있다.

 

        */

        for (int i = 0; i < (sizeof(number)/sizeof(int)) -1; i++) {

               printf("%d단계\n",++count);

               for (int j = 0; j < max; j++) //인덱스 값은 0부터 시작하기 때문에 -1,

                                                                            //ex){1,2,3,4} 갖는 배열의 리턴값은 4이지만

                                                                            //index값으로는 0,1,2,3이기때문에  -1해줌

               {

                       if (number[j] > number[j+1])  //왼쪽의 수가 오른쪽 보다 크다면 서로 수를 교환

                       {

                              int temp = number[j];         //교환 알로리즘

                              number[j] = number[j+1];

                              number[j+1] = temp;

                       }

 

                       for (int k = 0; k <= (sizeof(number)/sizeof(int))-1; k++)    //출력

                       {

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

                       }

                      

                       printf("\n");

                      

               }

               max = max - 1; //제일 오른쪽(제일 큰수) 정렬 되었기때문에 그쪽은 이상 비교하지 않음

              

        }

}


버블정렬 결과


input_number = 5,3,4,1,2


input number = 99,100,1,50,57,86,30,54,3215,10


배열의 0번 인덱스부터 최종인덱스까지 비교를 한번 했을 때, 단계를 증가시키도록 코딩하였습니다(보기 편할까 해서요 ㅎ)

두 결과 모두 작은수부터 큰 수로 정렬되었습니다.

버블 정렬은 큰 수가 점차 떠오르는 정렬이라는 점 기억하세요.

이상으로 c언어 버블 정렬 포스팅을 마치겠습니다.