버블정렬(Bubble Sort)


버블정렬(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





결과



 

'자료구조' 카테고리의 다른 글

삽입정렬 (Insertion sort)  (0) 2017.01.01
빅오  (0) 2017.01.01
선택정렬 (Selection sort)  (0) 2017.01.01
변형된 버블정렬 (Bubble Sort)  (0) 2017.01.01
정렬이란?  (0) 2017.01.01

정렬이란?


정렬이란?

순서없이 나열된 자료를 특정한 키값에 따라 

오름차순이나 내림차순으로 재 배열하는 것을 의미한다.




정렬은 자료 탐색에 있어 필수적이다.

예를들어 사전에서 단어를 찾을 때 알파벳순으로 정렬되어 있지 않다면 특정한 단어를 찾는 것이 매우 힘들것이다.

물론 컴퓨터로 찾는다면 사람이 찾는것보다는 빨리 찾을 수 있을테지만, 탐색의 효율이 떨어지는것은 피할수 없다.


정렬은 많은 분류가 있지만 수행되는 공간에 따라 내부정렬과 외부정렬로 나뉘어 진다.

내부정렬은 정렬하고자 하는 모든 데이터가 메모리에 올라와 정렬이 수행되는 것을 의미한다.

외부정렬은 정렬하고자 하는 데이터가 너무 크기 때문에 모든 데이터를 메모리에 올려놓을 수 없으므로 일부만 올려놓은 상태에서 정렬한 이것을 다시 합하는 방식이다.




정렬의 종류


※ 내부정렬.

 정렬

 삽입법

 - 삽입 정렬 (Insertion sort).

 - 쉡 정렬 (Shell sort).

 교환법

 - 선택정렬 (Selection sort).

 - 퀵 정렬 (Quick sort)

 - 버블 정렬 (Bubble sort).

 선택법

 - 힢 정렬 (Heap sort)

 병합법

 - 머지 정렬 (Merge sort).

 분포 

 - 개수정렬 (counting sort).

 - 기수 정렬 (radix sort)

 - 버킷 정렬 (bucket sort)



※외부정렬

균형적 다방향 머지 정렬.



정렬의 기본 동작

판단 : 두 값의 크기를 비교하여 크고 작음을 판단한다.

교환 : 판단 결과를 만족할 경우 두 값을 교환한다.

'자료구조' 카테고리의 다른 글

삽입정렬 (Insertion sort)  (0) 2017.01.01
빅오  (0) 2017.01.01
선택정렬 (Selection sort)  (0) 2017.01.01
변형된 버블정렬 (Bubble Sort)  (0) 2017.01.01
버블정렬(Bubble Sort)  (0) 2017.01.01
prev 1 ··· 26 27 28 29 next