본문 바로가기

C, C++

C++/왕복버블정렬 알고리즘

 

풀이.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "config.h"
 
void main() {
 
    int d[] = { 21119105394746499 };    // 예시로 든 숫자
    int n = 10;
    int left = 0, right = 9, shift, i;
    // left =>  왼쪽에서 오른쪽으로 비교할 때 정렬하기 위한 비교를 실행하는 시작 위치
    // right => 오른쪽에서 왼쪽으로 비교할 때 정렬하기 위한 비교를 실행하는 시작 위치
    // shift => 마지막으로 값 교환이 실행된 위치 => 중요!!
 
    while (left < right) {
 
//        먼저 왼쪽에서 오른쪽으로 비교하며 정렬한다.
        i = left;
        while (i < right) {
            if (d[i] > d[i + 1]) {
                swap(d[i], d[i + 1]);
//        값 교환이 실행되었으므로 마지막으로 값 교환이 실행된 위치를 기억하는 변수인 shift에 값 교환이 실행된 위치(i)를 넣어준다.
                shift = i;    // 마지막으로 값 교환이 이루어진 자리를 기억함으로서, swift 자리부터 다시 돌리면 됨.  i 가 swift 가 되어야 함.
            }
            i++;
        }
        right = shift;
 
//        오른쪽에서 왼쪽 비교 정렬.
        i = right;
        while (i > left) {
            if (d[i - 1> d[i]) {
                swap(d[i], d[i - 1]);
                shift = i;
            }
            i--;
        }
        left = shift;
 
    }
 
    printf("정렬 결과 : ");
    for (int i = 0; i < 10; i++) {
        printf("%d\n", d[i]);
    }
    printf("\n");
 
 
}
 
cs

 

주석 없는 ver.
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
32
33
34
35
#include "config.h"
 
void main() {
    int d[] = { 21119105394746499 };
    int left = 0, right = 9, shift, i;
 
    while (left < right) {
        i = left;
        while (i < right) {
            if (d[i] > d[i + 1]) {
                swap(d[i], d[i + 1]);
                shift = i;
            }
            i++;
        }
        right = shift;
        i = right;
        while (i > left) {
            if (d[i - 1> d[i]) {
                swap(d[i], d[i - 1]);
                shift = i;
            }
            i--;
        }
        left = shift;
 
    }
 
    printf(" 정렬 결과 : ");
    for (int i = 0; i < 10; i++) {
        printf("%d\n", d[i]);
    }
    printf("\n");
 
}
cs

 

'C, C++' 카테고리의 다른 글

C++/call by value, call by reference  (0) 2020.01.13
C++/달력 만들기 헤더 파일/  (0) 2020.01.10
C++/소인수분해 알고리즘 문제/  (0) 2020.01.08
C++/점수별 등급 주기/if/switch  (0) 2020.01.06
C/C++/if/윤년평년 판별식  (0) 2020.01.06