[Algorithm] 버블정렬 (배열에 있는 정수값 오름차순 정렬하기)

정렬(Sort)하는 방법을 포스팅합니다. 정렬하는 방법은 대표적으로 버블정렬,선택정렬,삽입정렬 이렇게 3가지가 있습니다. 차례대로 한번 알아보도록 하죠 먼저 이번 포스팅에서는 버블정렬에 대해 포스팅하도록 하겠습니다. 예제는 배열에 있는 정수값을 오름차순으로 정렬하는 예제를 들고왔습니다. 내림차순으로 정렬하실경우 예제의 IF문의 부등호방향만 바꿔주시면 됩니다.


버블정렬 

버블정렬은 배열내의 두개의 인접한 Index를 비교하여 더 큰 숫자를 뒤로 보내 차곡차곡 쌓아 정렬하는 방법입니다. 결론적으로 말하자면 배열의 뒷쪽부터 정렬하는 방법이라고 생각하시면 될 듯 합니다.


첫번째 FOR문

첫번째 for문 for문에서 [0]번째 Index와 [1]번째의 Index값을 비교하여 더 큰 숫자를 뒤로 보내줍니다.

for문에서도 마찬가지로 [1]번째 [2]번째의 Index값을 비교하여 더 큰 숫자를 뒤로 보내주죠. 

이런식으로 번처럼 배열의 끝까지 정렬을 다 했으면 다시 배열의 처음으로 돌아와

2번째 for문정렬이 완료될때까지 반복하는것이 버블정렬입니다.


버블정렬로 배열에있는 정수값 오름차순 정렬하기 (C/C++)

#define num 20

int number[num] {11,234,23,4,1,5,6,2,65,764,825,46,72,47,26,69,793,25,498,245};
int temp;
for(int i = 0 ; i < num ; i ++) {
     for(int j = 0 ; j < num -i -1 ; j ++) {
                if(number[j]>number[j+1]) {
                    temp = number[j];
                    number[j] = number[j+1];
                    number[j+1] = temp;
         }
    }
}
         
for(int i = 0 ; i < 20 ; i ++) {
     printf("[%d]",number[i]);
}

결과값

버블정렬결과



[C언어] 선택정렬 (배열에 있는 정수값 내림차순 정렬하기)

[C언어] 삽입정렬 (배열에 있는 알파벳 차례대로 정렬하기)

[C언어] 병합정렬 (실무에서 많이쓰는 정렬방법)

[C언어] 퀵정렬 (가장 빠르고 효율적인 정렬방법)

[C언어] 여러가지 정렬 속도 비교(정렬의 시간복잡도


댓글(2)

  • 김인엽
    2018.08.16 20:56

    이것때문에 오늘 반나절을 붙잡고있었네요 ㅜㅜ 근데도 안돼서 결국 해답을 보게됩니다.... 제건 왜 안될까요...무한걸린것같은데 ㅜㅠㅜ
    #include <stdio.h>
    void main() {
    int A[7] = { 6,3,9,7,2,4,1 };
    int a = 0, B, b = 0;
    while (a < 7) {
    if (A[a] > A[a + 1]) {
    B = A[a + 1];
    A[a + 1] = A[a];
    A[a] = B;
    b = a;
    while (a != 0 && A[a] < A[a - 1]) {
    B = A[a];
    A[a] = A[a - 1];
    A[a - 1] = B;
    a--;
    }
    }
    a = b + 1;
    }
    printf("%s", A);
    }

    • 2018.09.10 10:37 신고

      질문자님께서 작성하신 코드에 따르면 처음의 배열의 값은 6397241이고 a[0]=6이 a[1]=3보다 크므로 while문 첫번째에 있는 if문에 걸려서 sort가되겠군요. 그러면 두번째 while문에서는 3697241이 될것입니다. 그러면 두번째 while문의 A[1] =6이고 A[1]=6일때 A[2]이 9보다 크지 않으므로 While문 첫번째에 있는 If문에 들어가지 않고 무한루프가 도는군요. 이 부분만 해결해주면 될것같습니다.

Designed by JB FACTORY