알고리즘/정렬

버블 정렬

Aif 2023. 8. 23. 15:22

버블 정렬은 정렬되는 모습이 거품이 일어나는 듯하다 해서 버블 정렬이다.

 

버블 정렬은 인접한 데이터와 자신을 비교하여 기준에 따라 정렬하는 것을 무수히 반복하면 된다.

 

문장에서 '기준'과 '무수히'라는 표현이 애매하게 만드는 것 같다.

 

기준은 오름차순 정렬을 기준으로 한다.

 

무수히는 데이터의 개수를 n개라 했을 때 n-1회 반복하면 된다.

 

n-1회는 최악의 경우를 고려하여 계산해 보면 알 수 있다.

 

버블 정렬은 인접한 데이터와 자신을 비교하여 자신이 크면 바꾸는 것을 n-1회 반복하면 된다.

 

void BubbleSort()
{
    int i = 0;
    int j = 0;
    int temp = 0;
    int DataSet[10] = { 5, 6, 9, 1, 2, 4, 3, 7, 8, 10 };
    Length = sizeof(DataSet) / sizeof(DataSet[0]);

    for (i = 0; i < Length - 1; i++)
    {
        for (j = 0; j < Length; j++)
        {
            if (DataSet[j] > DataSet[j + 1])
            {
                temp = DataSet[j + 1];
                DataSet[j + 1] = DataSet[j];
                DataSet[j] = temp;
            }
        }
    }
}

여기서 한사이클 이 돌때, 배열의 제일 마지막은 정렬이 완료 되므로 다음과 같이 수정할 수 있다.

void BubbleSort()
{
    int i = 0;
    int j = 0;
    int temp = 0;
    int DataSet[10] = { 5, 6, 9, 1, 2, 4, 3, 7, 8, 10 };
    Length = sizeof(DataSet) / sizeof(DataSet[0]);

    for (i = 0; i < Length - 1; i++)
    {
    	// 수정된 부분
        for (j = 0; j < Length - (i + 1); j++)
        {
            if (DataSet[j] > DataSet[j + 1])
            {
                temp = DataSet[j + 1];
                DataSet[j + 1] = DataSet[j];
                DataSet[j] = temp;
            }
        }
    }
}

 

 

 

'알고리즘 > 정렬' 카테고리의 다른 글

위상 정렬  (0) 2023.09.11
버블, 삽입, 퀵 비교  (0) 2023.08.23
퀵 정렬  (0) 2023.08.23
삽입 정렬  (0) 2023.08.23