ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [알고리즘] 버블 정렬
    알고리즘 & 자료구조/알고리즘 2021. 1. 19. 14:16

    버블 정렬

    버블 정렬은 두 개의 인접한 자료 값을 비교하면서 위치를 교환하는 방식으로 정렬하는 방법이다.

    버블 정렬은 단 두 개의  요소만 정렬해주는 좁은 범위의 정렬에 집중한다.

    접근법 자체는 간단하지만, 단 하나의 요소를 정렬하기 위해 너무 많은 교환이 발생할 수 있다.

     

     

     


    예를 들어 

     

    6 3 8 5 2 7 4 1 

     

    이라는 숫자를 오름차순으로 정렬한다고 가정해보자.

     

    우선 가장앞의 6 과 3을 비교해서 순서를 바꾼다.

     

    3 6 8 5 2 7 4 1 

     

    이제 6 과 8을 비교해보면 교환할 필요가 없으므로 그대로 두고

    바로 다음에 있는 쌓인 8과 5를 비교해서 순서를 바꾼다.

     

    3 6 5 8 2 7 4 1

     

    이런식으로 끝까지 진행한다면

     

    3 6 5 2 7 4 1 8 

     

    위와 같이 정렬된다.

     

     

    하지만 아직 오름차순으로 정렬이 되지 않았기 때문에, 다시 처음부터 동일한 작업을 반복한다.

     

    이 과정을 반복하다보면 최종적으로는 아래와 같이 오름차순 정렬이 된다.

     

    1 2 3 4 5 6 7 8

     

    이러한 방식을 버블정렬이라고 한다.

     

    한번 수행 할 때 마다 맨 뒤의 숫자는 정렬된다는 특징이 있다.

    고로 수행시 마다 수행해야 할 인덱스가 1개 씩 줄어든다.

     

    #include <stdio.h>
    
    #define SIZE 8
    
    int main()
    {
        int temp;
        
        int arr[SIZE] = {6,3,8,5,2,7,4,1}; 
    
    
        
        for(int i = 0; i < SIZE -1; i++) //(n-1)...(n-2)..(n-3)..이런 식으로 전체를 정렬해야 하는 횟수가 줄어듬
        {                          //   왜냐. 한번 정렬시에 마지막 숫자 8은 이미 정렬 되어있음
            for(int j = 0; j < (SIZE-1) - i; j++){ //인덱스 번호 비교를 위한 반복문
                if(arr[j] > arr[j+1])
                {
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    
    
    
        for(int i = 0; i < 8; i++)
        {
            printf("%d ", arr[i]);
            
        }
        
        return 0;
    }
    #include <stdio.h>
    
    int main(void)
    {
        int i, j , temp;
        int array[10] = {1,10,5,8,7,6,4,3,2,9};
        for(i = 0; i < 10; i++)
        {
            for(j = 0; j < 9-i; j++)
            {
                if(array[j] > array[j+1])
                {
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                }
            } 
        }
    
        for(i = 0; i < 10; i++)
        {
            printf("%d ", array[i]);
        }
        return 0;
    }
    
    

     

     

    이러한 버블 정렬의 Big O 는 선택정렬과 마찬가지로 등차수열에 따라서 

    O(N^2) 가 된다.

     

     

     

     

     

    728x90
    반응형

    댓글

Designed by Tistory.