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