알고리즘/정렬

버블정렬

kark 2024. 1. 6. 17:48
728x90

버블정렬은 인접한 두 데이터의 크기를 비교해 정렬하는 방식

구현은 쉬운편이나 O(n2) 시간 복잡도를 갖는다.

 

해당 알고리즘은 위처럼 인덱스를 넘겨가며 데이터의 크기를 비교한 뒤

원하는 조건으로 정렬해주면 된다.

 

이때 전체 배열의 한 루프가 종료되면 가장 마지막 데이터는 정렬이 완료된다는것을 알수있다.

한번의 루프가 종료될때마다 탐색구간이 줄어들며 비교대상이 없을때까지 반복해주면 된다.

 

또한 한번의 루프동안 교체가 일어나지 않는다면 정렬이 완료된것으로 간주하면 된다.

 

문제

https://www.acmicpc.net/problem/2750

 

2750번: 수 정렬하기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

 

풀이

Sort(int.Parse(Console.ReadLine()));

void Sort(int count)
{
    int[] arr = new int[count];
    bool isChanged;

    for (int i = 0; i < count; i++)
    {
        arr[i] = int.Parse(Console.ReadLine());
    }

    int lastPoint = 0;

    while (true)
    {
        isChanged = false;

        for (int i = 1; i < count - lastPoint; i++)
        {
            if(arr[i] < arr[i-1])
            {
                int temp = arr[i];
                arr[i] = arr[i-1];
                arr[i-1] = temp;

                if(!isChanged)
                    isChanged = true;
            }
        }

        if(!isChanged)
            break;

        lastPoint++;
    }

    for (int i = 0; i < arr.Length; i++)
    {
        System.Console.WriteLine(arr[i]);
    }
}

 

미흡한부분이나 개선될 수 있는부분이 있다면 댓글 부탁드립니다.

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

병합정렬  (0) 2024.02.21
퀵정렬  (0) 2024.02.19
삽입정렬  (1) 2024.02.08
선택정렬  (1) 2024.01.06