자료구조

버블정렬(Bubble Sort)

비선형구조 2017. 1. 1. 18:05


버블정렬(Bubble Sort)


 - 인접한 두 개의 값을 비교하여 크기가 순서대로 되어있지 않으면 두 개의 값의 자리를 교환하는 것.

 - 비교 및 판단 작업을 거처 가장 큰 값이 리스트 우측 끝으로 밀려나게 된다.



임의의 값을 정렬해보자.

정렬의 순서는 오름차순이다.




▷ 정렬방법.


1. 첫 번째 값과 두 번째 값을 비교한다.


2. 두 번째 값이 첫 번째 값 보다 더 크면 바꾸지 않는다.


3. 두 번째 값이 첫 번째 값 보다 더 작으면 바꾼다.


4. 두 번째 값과 세 번째 값을 비교한다.


5. 이를 n번째 값까지 반복한다.


6. 5번이 끝났으면 n번째에는 가장 큰 값이 존재하게 된다.


7. 모든 값이 정렬될때 까지 1~5번을 반복한다.




시작 : 5, 7, 3, 4, 9, 1


0.  5, 7, 3, 4, 9, 1


1.  5, 7, 3, 4, 9, 1


2.  5, 7, 3, 4, 9, 1


3   5, 3, 7, 4, 9, 1


4.  5, 3, 7, 4, 9, 1


5.  5, 3, 4, 7, 9, 1


6.  5, 3, 4, 7, 9, 1


7.  5, 3, 4, 7, 9, 1


8.  5, 3, 4, 7, 9, 1


9.  5, 3, 4, 7, 1, 9



한 번의 판단 및 교환이 끝나면 제일 큰 값이 우측으로 밀려나게된다.

이렇게 되었을 때 제일 우측에 있는값은 리스트에 존재하는 값들중에 제일 큰 값이므로

또 검사할 필요가 없어진다.


다음은 리스트에 존재하는 값들중 9를 제외한 가장 큰 값을 찾아서 6번째 자리를 제외한 5번째 자리로

밀어버린다.


이러한 과정들을 반복하면 정렬된 값들을 얻을 수 있게된다.




Code.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
 
#define MAX            6
 
void BubleSort(int *Number );
void main()
{
    int Number[MAX] = {5,7,3,4,9,1};
 
    BubleSort( Number );
 
    for(int i = 0; i < MAX; i++)
        printf("%d \n", Number[i] );
}
 
void BubleSort(int *Number )
{
    for(int i = 0; i < MAX - 1; i++)
    {
        for(int j = 0; j < (MAX - 1- i; j++)
        {
            if(Number[j] > Number[j + 1])
            {
                int Temp = Number[j];
                Number[j] = Number[j + 1];
                Number[j + 1= Temp;
            }
        }
    }
}
cs





결과