알고리즘 - 퀵정렬) 복습을 위해 작성하는 글 2023-04-08

rizz·2023년 4월 8일
0

알고리즘

목록 보기
3/15

📒 갈무리 - 퀵정렬(Quick Sort)

📌 퀵정렬이란?

- 피봇을 기준으로 작거나 같은 값의 데이터는 앞으로, 큰 값의 데이터는 뒤로 이동시켜, 작은 값과 큰 값을 분리해가며 정렬하는 방법이다.(분할정복)

 

📌 직접 구현해 보자...

// C#
    public void QuickSrot(int[] data, int start, int end)
        {
            if (start >= end)  // 원소가 1개인 경우
            {
                return;
            }
            int key = start; // 키는 첫번째 원소
            
            // 인덱스
            int i = start + 1;
            int j = end;
            int temp;

            while (i <= j) // 엇갈릴 때까지 반복
            {
                while (data[i] <= data[key]) // 피봇 값보다 큰 값을 만날 때까지
                {
                    i++;
                }
                // 피봇 값보다 작은 값을 만날 때까지 && start를 넘어가서 찾지 못하게
                while (data[j] >= data[key] && j > start) 
                {
                    j--;
                }
                if (i > j) // 현재 엇갈린 상태면 키 값과 교체
                {
                    temp = data[j];
                    data[j] = data[key];
                    data[key] = temp;
                }
                else
                {
                    temp = data[j];
                    data[j] = data[i];
                    data[i] = temp;
                }
            }
            QuickSrot(data, start, j - 1);
            QuickSrot(data, j + 1, end);
        }
        // 가독성을 위해 각 기능마다 함수로 분리하면 좋지만, 지금은 편의상 간단하게 구현함

 

📌 퀵정렬의 특징

- 다른 정렬 알고리즘에 비해 속도가 빠르다.

- 이미 정렬된 리스트에 대해서는 수행시간이 더 오래 걸린다.

- 평균 속도는 O(N*LogN)이다.

- 피봇값을 설정하는 것에 따라서 최악의 경우에는 O(N²)의 시간이다.

- 수행 절차에 있어서 분할이 되어가며 수행이 되면 속도가 빠르게 동작할 수 있지만 그렇지 못하면 비효율적으로 동작될 수 있다.

 

💡 TIP

정렬할 데이터의 특성에 따라서 적절한 알고리즘이 사용하는 것이 중요하다.

profile
복습하기 위해 쓰는 글

0개의 댓글