Prosto
버블 정렬(Bubble Sort) - C언어/자료구조 본문
'보글보글 거품 같이 차례차례 정렬하는 버블정렬'
버블정렬은 거품정렬이나 버블소트(Bubble Sort)라고도 부릅니다.
버블정렬은 데이터 정렬을 하는 방법 중 하나입니다.
첫 번째 자료와 두 번째 자료, 두 번째 자료와 세 번째 자료, 세번째와 네 번째 자료를
비교하는 식으로 정렬을 진행합니다. (아래 그림 보시면 이해가 빠를 겁니다.)
여러 회전을 반복하여 정렬하는 방법입니다.
첫 번째 회전에서는
첫 번째 자료와 두 번째 자료를 비교하여 첫 번째 자료가 더 큰 경우
첫 번째와 두 번째 자료를 바꿉니다. (두 번째가 더 큰 경우는 안 바꿈 )
그리고 두 번째 자료와 세 번째 자료를 비교하여 위와 같은 작업을 해줍니다.
마찬가지로 세 번째와 네 번째, 그렇게 마지막 자료까지 비교해줍니다.
(그렇다면 결과적으로 마지막 자리가 가장 큰 자료가 들어가겠죠?)
두 번째 회전에서는
첫 번째와 마찬가지로 쭉 진행합니다.
다만, 마지막 자리는 이미 가장 큰 수로 결정되어 있기 때문에
마지막의 전 자리의 자료까지만 비교합니다. 비교 횟수가 한 번 줄겠죠?
(그 결과로는 두 번째로 큰 자료(끝에서 두 번째)가 정해집니다.)
그렇게 모든 정렬이 끝날 때까지 반복합니다.
(스위치[검사]를 사용하면 자료가 미리 완료된 경우 그만 회전하도록 합니다.)
실제로 5개의 숫자 배열 자료가 어떻게 정렬되는지 확인해볼까요?
7, 4, 10, 3, 5 숫자를 가지고
버블소트(버블정렬) 하는 과정을 보도록 하겠습니다.
1 회전
가장 먼저 첫 번째 자리와 두 번째 자리의 자료를 비교합니다.
7과 4를 비교한 결과
4가 더 작기 때문에 서로 교환해줍니다.
다음으로 두 번째 자리와 세 번째 자리의 자료를 비교합니다.
7과 10을 비교한 결과
두 번째 자리의 7이 더 작기 때문에 교환하지 않습니다.
다음으로 세 번째 자리와 네 번째 자리의 자료를 비교합니다.
10과 3을 비교한 결과
세 번째 자리의 10보다 네 번째 자리의 3이 작기 때문에 교환합니다.
마지막으로 네 번째 자리와 다섯 번째 자리의 자료를 비교합니다.
10과 5를 비교한 결과
네 번째 자리의 10이 다섯 번째 자리의 5보다 크기 때문에
교환합니다.
(이렇게 첫 바퀴에서 가장 큰 숫자 10이 가장 오른쪽으로 간 것을 확인할 수 있습니다.)
2 회전
두 번째 회전에서 처음과 같이 첫 번째 자리와 두 번째 자리의 자료를 비교합니다.
4와 7을 비교한 결과
첫 번째 자리의 4가 더 작기 때문에 교환하지 않습니다.
다음으로 두 번째 자리와 세 번째 자리의 자료를 비교합니다.
7과 3을 비교한 결과
두 번째 자리의 7이 세 번째 자리의 3 보다 크기 때문에 교환해줍니다.
다음으로 세 번째 자리와 네 번째 자리의 자료를 비교합니다.
7과 5를 비교한 결과
세 번째 자리의 7이 네 번째 자리의 5보다 크기 때문에 교환해줍니다.
(이렇게 두 번째로 큰 수인 7, 가장 큰 수인 10이 정렬 완료되었습니다.)
3 회전
다시 처음으로 돌아와 첫 번째 자료와 두 번째 자료를 비교합니다.
4와 3을 비교한 결과
첫 번째의 4가 두 번째의 3보다 크기 때문에 서로 교환해줍니다
이번에는 두 번째 자료와 세 번째 자료를 비교합니다.
4와 5을 비교한 결과
두 번째의 4가 세 번째의 5보다 작기 때문에 그대로 둡니다.
(이렇게 세 번째로 큰 수인 5도 결정됐습니다.)
4 회전
마지막 회전입니다.
첫 번째 자리의 3과 두 번째 자리의 4를 비교한 결과
첫 번째 자리가 두 번째 자리보다 작기 때문에 그대로 둡니다.
(이렇게 네 번째로 큰 수인 4도 결정됐습니다.)
나머지 하나는 그대로 둬도 가장 작은 숫자이기 때문에
비교하지 않아도 맞는 위치임을 알 수 있습니다.
버블 정렬이 완료되었습니다.
그러면 이번에는 C 프로그램으로 확인해볼까요?
(소스 제공하지만 위의 과정을 보고 직접 만들어보면 좋습니다.)
출력 결과 예를 보고
프로그램 소스를 작성해보세요.
(출력 결과 예)
제가 완성한 소스입니다.
보고 참고하세요.
(복사할 수 있는 소스는 아래 전체복사용소스보기를 누르시면 됩니다.)
궁금한 점 있으시면 댓글이나 따로 메일로 질문하시면 시간되는 대로 답변드리겠습니다. ( 연락 )
'Programing > C Programing' 카테고리의 다른 글
이분 검색(Binary Search) - C언어/자료구조 (6) | 2016.10.20 |
---|---|
삽입 정렬(Insertion Sort) - C언어/자료구조 (5) | 2016.10.19 |
선택 정렬(Selection Sort) - C언어/자료구조 (9) | 2016.10.17 |
배열 연습문제 -3 (문제 설명 + 완성 소스) - C언어 (0) | 2016.10.14 |
비주얼 스튜디오 2015 설치 방법 (Visual Studio 2015) (10) | 2016.10.14 |