반응형

 

버블정렬(Bubble sort)

- 1순회마다 큰숫자가 제일 뒤로 밀려나는게 거품이 수중표면으로 올라가는것과 비슷해서 지어진 이름이다.

- 인접한 두 원소를 검사하여 정렬하는 방법이다.

- 시간복잡도가 O(n^2)이기 때문에 느리지만 코드가 단순하다.

 

 

 

 

원리 (오름차순 기준)

  ※ 모든 순회를 다 표현하기엔 이미지 양이 많아지므로 1순회만 기준으로 설명한다.

  1. 2중 반복문으로 원소들을 돌면서 바로 다음 원소와 대소관계를 비교한다.

  2. 비교한 다음 대소관계에 따라 해당 원소와 비교 원소의 위치를 바꿔준다.

    ※ 마지막 순회는 정렬할 필요가 없으므로 순회를 돌 필요가 없다.

 

 

코드

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 10

void SetArr(int arr[])
{
    for (int i = 0; i < MAX; i++)
    {
        arr[i] = rand() % 100;
    }
}

void PrintArr(int arr[])
{
    for (int i = 0; i < MAX; i++)
    {
        printf("%%d\n", i, arr[i]);
    }
}

void BubbleSortAscending(int arr[])
{
    for (int i = MAX - 1; i > 0; i--)
    {
        for (int j = 0; j < i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int tmp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = tmp;
            }
        }
    }
}

void BubbleSortDescending(int arr[])
{
    for (int i = MAX - 1; i > 0; i--)
    {
        for (int j = 0; j < i; j++)
        {
            if (arr[j] < arr[j + 1])
            {
                int tmp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = tmp;
            }
        }
    }
}

void main()
{
    srand(time(NULL));
    int iArr[MAX] = { 0 };
    
    SetArr(iArr);
    
    BubbleSortAscending(iArr);
    //PrintArr(iArr);
    
    BubbleSortDescending(iArr);
    //PrintArr(iArr);
}
반응형

'Stack > Algorithm' 카테고리의 다른 글

[유니티 C#] 퀵 정렬(Quick sort) 구현  (0) 2022.10.06
문자열, 숫자 뒤집기  (0) 2021.10.16
퀵정렬(Quick Sort) 구현  (0) 2021.09.19
삽입정렬(Insertion Sort) 구현  (0) 2021.09.18
선택정렬(Selection Sort) 구현  (0) 2021.09.15

+ Recent posts