[알고리즘] 퀵정렬

2022. 11. 22. 00:15·개발/알고리즘
728x90
반응형

1. 퀵정렬

데이터를 분할하여 배열에 0개 또는 1개의 항목이 남을때까지 분할하여 개별적으로 정렬되는 방식

피벗포인트라 부르는 단일 요소를 선택하여 수행한다.

그러니 어떤 배열에서 어떤 요소를 선택하든 사실상 문제가 되지 않는다.

 

2. 퀵정렬 순서

선택한 숫자보다 작은숫자를 왼쪽으로 옮긴다

선택한 숫자보다 큰숫자를 오른쪽으로 옮긴다.

이 때 선택한 숫자는 올바른 위치이다.

이 과정을 왼쪽과 오른쪽에 반복한다.

 

예시)

[5,2,1,8,4,7,6,3]
5선택
3,2,1,4 5 7,6,8
왼쪽 다루기
1,2,3,4 5 7,6,8
오른쪽 다루기
1,2,3,4,5,6,7,8

3. 구현

(1) pivot 함수

function pivot(arr, start = 0, end = arr.length - 1) {
  const swap = (array, i, j) => {
    [array[i], array[j]] = [array[j], array[i]];
  };

  let pivot = arr[start]; // 아무값 지정 가능
  let swapIdx = start;
  for (let i = start + 1; i <= end; i++) {
    if (pivot > arr[i]) {
      swapIdx++;
      swap(arr, swapIdx, i);
    }
  }
  swap(arr, start, swapIdx);
  return swapIdx;
}

(2) 퀵정렬 전체

const quickSort = (arr, left = 0, right = arr.length - 1) => {
  if (left < right) {
    let pivotIdx = pivot(arr, left, right);
    quickSort(arr, left, pivotIdx - 1);
    quickSort(arr, pivotIdx + 1, right);
  }
  return arr;
};

4. 퀵정렬 빅O

시간복잡도(최고) 시간복잡도(평균) 시간복잡도(최악) 공간복잡도
O(nlogn) O(nlogn) O(n^2) O(logn)
728x90
반응형

'개발 > 알고리즘' 카테고리의 다른 글

[알고리즘] 기수정렬  (0) 2022.11.22
[알고리즘] 합병정렬  (0) 2022.11.22
[알고리즘] 버블정렬, 선택정렬, 삽입정렬  (0) 2022.11.17
[알고리즘] 선형검색, 이진검색  (0) 2022.11.15
[알고리즘] 재귀함수 문제 모음  (31) 2022.11.15
'개발/알고리즘' 카테고리의 다른 글
  • [알고리즘] 기수정렬
  • [알고리즘] 합병정렬
  • [알고리즘] 버블정렬, 선택정렬, 삽입정렬
  • [알고리즘] 선형검색, 이진검색
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    node
    React
    html
    도커
    컨테이너
    CSS
    go
    js
    node.js
    mysql
    프로그래머스
    하이퍼레저
    erc20
    30일챌린지
    블록체인
    go언어
    30일 챌린지
    nodejs
    명령어
    ERC721
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[알고리즘] 퀵정렬
상단으로

티스토리툴바