HotFoxy
불여우의 전직 이야기
게임 서버 개발자가 되어 보죠!
전체 방문자
오늘
어제
  • 분류 전체보기 (135)
    • 연구한 이야기 (26)
      • 깊게 공부해보기 (7)
      • 문제 해결 이야기 (12)
      • 맡은 업무 이야기 (6)
    • 전직 이야기 (0)
      • 1년이라는 시간 (5)
      • 프로카데미 이야기 (5)
    • 공부한 이야기 (87)
      • 알고리즘 (7)
      • 리눅스 (11)
      • 클라우드 (24)
      • 윈도우 OS (17)
      • 윈도우 소켓 프로그래밍 (11)
      • 네트워크 (16)
      • Docker & K8S (0)
      • 기타 (1)
    • 자격증 이야기 (12)
  • MSB : Mad Square's Brawl
  • GITHUB

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
HotFoxy
공부한 이야기/알고리즘

정렬 - 퀵정렬

공부한 이야기/알고리즘

정렬 - 퀵정렬

2022. 8. 7. 19:08

퀵 정렬

퀵 정렬은 정렬 중에서 빠른 속도로 인해 유명한 대표적인 정렬 방법론 중 하나이다.

이는 분할 정복 방법을 통해서 배열을 정렬하게 된다.

배열의 값들 중 하나의 원소를 고르고, 이를 피벗이라고 명한다.

이 앞에는 피벗보다 작은 값이 오도록, 이 뒤에는 큰 값이 오도록 배열을 정렬하고 둘로 나눈 뒤,

다시 이 작은 배열에 대해 재귀적으로 퀵 정렬을 반복한다.

generateRandomArray, printArray, swap

int partition(int *myArray, int left, int right) {
    int pivot = myArray[left];
    int i = left, j = right;

    while (i < j) {
        while (pivot < myArray[j]) {
            j--;
        }
        while (i < j && pivot >= myArray[i]) {
            i++;
        }
        swap(&myArray[i], &myArray[j]);
    }
    swap(&myArray[left], &myArray[i]);

    return i;
}

void quickSort(int *myArray, int left, int right) {
    if (left < right) {
        int pivotIndex = partition(myArray, left, right);

        quickSort(myArray, left, pivotIndex - 1);
        quickSort(myArray, pivotIndex + 1, right);
    }
}
static int arrayLength = 20;
int *myArray = generateRandomArray(arrayLength);

printArray(myArray, arrayLength);

quickSort(myArray, 0, arrayLength - 1);

printArray(myArray, arrayLength);

free(myArray);

작은 것부터, 점점 커지게, 오름차순으로 정렬한 예제이다.

퀵 정렬은 최선의 경우 O(N * log N) 의 복잡도를, 최악의 경우 O(N²)의 복잡도를 가지게 된다.

하지만 불필요한 데이터의 이동을 줄이고, 한 번 결정된 피벗들은 재 연산때 필요하지 않게 되므로, 빠른 속도를 보장할 수 있다.

다만 불안정 정렬이라는 단점이 존재한다.

저작자표시 (새창열림)

'공부한 이야기 > 알고리즘' 카테고리의 다른 글

정렬 - 힙정렬  (0) 2022.08.07
정렬 - 기수정렬  (0) 2022.08.07
정렬 - 삽입정렬  (0) 2022.08.07
정렬 - 선택정렬  (0) 2022.08.07
정렬 - 버블정렬  (0) 2022.08.07
  • 퀵 정렬
'공부한 이야기/알고리즘' 카테고리의 다른 글
  • 정렬 - 힙정렬
  • 정렬 - 기수정렬
  • 정렬 - 삽입정렬
  • 정렬 - 선택정렬
HotFoxy
HotFoxy
1년 동안의 고군분투 전직 이야기! ..가 완료되어, 게임개발자로 살아남는 이야기!

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.