변형된 버블정렬 (Bubble Sort)
변형된 버블정렬 (Bubble Sort)
앞서 했던 버블정렬은 리스트에 존재하는 값중 제일 큰 값을 찾아 리스트의 오른쪽 끝으로 밀어버리고,
그 다음 큰 값을 찾아 제일 오른쪽 자리를 제외한 오른쪽 끝으로 다음 큰 값을 밀어버리는 방법을 사용했다.
이번에 사용할 방법은 리스트에 존재하는 값중 제일 작은값을 첫 번째 자리에 확정하고,
그 다음 작은 값을 찾아 두 번째 자리에 확정, 그 다음 작은 값을 찾아 세 번째 자리에 확정하는 방식을 이용할 것이다.
※ 앞서했던 버블정렬과 변형된 버블정렬에 차이는?
결론만 말하자면 차이가 없다.
형태만 조금 다를뿐 기능과 연산량은 같다고 생각하면 된다.
구지 차이점을 말하자면 코드 길이가 조금 더 길다의 차이일 뿐이다.
▷ 정렬방법
1. 첫 번째 자리에 잡은 값을 중심으로 나머지 값들을 비교 한다.
2. 첫 번째에 자리한 값보다 비교하는 값이 작다면 자리를 바꾼다.
3. 이를 리스트의 끝까지 반복한다.
4. 첫 번째 비교 및 교환이 끝났다면 중심 값(자리)를 두 번째로 바꾼다.
5. 중심 값(자리)가 리스트의 끝 까지 갈때까지 이를 반복한다.
※ [ ]은 중심 값이다.
시작 : 5, 7, 3, 4, 9, 1
0. [5], 7, 3, 4, 9, 1 - 5와 7을 비교 교환 X
1. [5], 7, 3, 4, 9, 1 - 5와 3을 비교 교환 O
[3], 7, 5, 4, 9, 1
2. [3], 7, 5, 4, 9, 1 - 3과 4를 비교 교환 X
3. [3], 7, 5, 4, 9, 1 - 3과 9를 비교 교환 X
4. [3], 7, 5, 4, 9, 1 - 3과 1을 비교 교환 O
[1], 7, 5, 4, 9, 3
5. 1, 7, 5, 4, 9, 3
다음은 2번째 자리의 값을 중심으로 그 뒤의 있는 값들을 위와 같은 방식으로 비교 및 교환 한다.
앞의 값들은 이미 정렬된 값이므로 비교하지 않아도 된다.
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; i++) { for(int j = i + 1; j < MAX; j++) { if(Number[i] > Number[j]) { int Temp = Number[i]; Number[i] = Number[j]; Number[j] = 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 |