정렬 알고리즘

2023. 12. 27. 18:57· Algorithm/정렬 알고리즘
목차
  1. 정렬이란? 
  2. 정렬 알고리즘의 종류
  3. 비교 기반이 아닌 알고리즘
  4. 비교 기반 알고리즘
  5. 마무리
  6. 참고 링크

정렬 알고리즘

 

 

 

정렬이란? 

정렬이란 데이터를 특정 기준에 따라 순서대로 나열한 것 입니다. 

정렬이 중요한 이유는 데이터를 정렬하면 이진 탐색을 할 수 있게 되기 때문입니다. 

이진 탐색은 절반씩 탐색하므로 전체를 탐색하는 선형 탐색 보다 압도적으로 빠르게 원하는 자료를 찾을 수 있습니다.

대신, 이진 탐색은 정렬된 배열에서만 사용할 수 있습니다. 이로 인해, 정렬 알고리즘이 중요해졌고 다양한 정렬 알고리즘이 등장했습니다. 

 

 

정리 

  • 정렬이란 데이터를 특정 기준에 따라 순서대로 나열한 것 
  • 정렬을 하면 이진 탐색이 가능해져 검색 속도를 올릴 수 있다. 

 

 

정렬 알고리즘의 종류

정렬 알고리즘의 종류는 다양하며, 각각의 알고리즘은 그 특성과 성능이 다르므로 주어진 환경에 맞게 적절한 알고리즘을

선택하는게 중요합니다. 다음은 정렬 알고리즘의 종류들 입니다.  

 

 

비교 기반이 아닌 알고리즘

  • 계수 정렬 (Counting Sort) O(n + k)
  • 기수 정렬 (Radix Sort) O(nk)

계수 정렬, 기수 정렬은 원소들간의 직접적인 비교를 사용하지 않습니다. 특정 환경에서는 비교 기반 정렬 알고리즘보다 빠를 수 있지만 입력 데이터에 따라 성능이 크게 달라집니다.

 

 

비교 기반 알고리즘

기초적인 정렬 알고리즘 - O(n^2)

  • 버블 정렬 (Bubble Sort)
  • 선택 정렬 (Selection Sort)
  • 삽입 정렬 (Insertion Sort) 

일반적으로 삽입 정렬, 선택 정렬, 버블 정렬 순으로 속도가 빠릅니다. 

 

 

향상된 정렬 알고리즘 - O(n log n) 

  • 퀵 정렬 (Quick Sort)
  • 병합 정렬 (Merge Sort)
  • 힙 정렬 (Heap Sort) 

이들은 평균적으로 O(n log n) 시간 복잡도를 가집니다.

하지만, 퀵 정렬은 최악의 상황에서는 O(n^2)의 시간 복잡도를 가집니다. 

 

 

Java의 Arrays.sort() 사용하는 알고리즘 - O(n log n) 평균 시간

  • 듀얼 피벗 퀵소트 (Dual Pivot Quick Sort) : 원시 타입 배열일 때 사용 (int[ ], long[ ], char[ ] 등등...)
  • 팀소트 (TimSort) : 객체 배열일 때 사용 (Integer[ ], String[ ] 등등...)

2가지 알고리즘을 사용하는 이유는 데이터 유형에 따라 최적화된 알고리즘을 사용하기 위해서 입니다.

 

원시(primitive) 타입 배열은 메모리에 연속적으로 위치합니다. 이는 효율적인 데이터 이동과 접근이 중요한 듀얼 피벗 퀵소트와 잘 맞습니다.

 

객체 배열은 일반적으로 원시 타입보다 크기가 크고 복잡한 데이터 구조를 가집니다. 듀얼 피벗 퀵소트는 값의 복사와 이동에 비용이 많이 드는 크고 복잡한 객체에는 비효율적입니다. 반면 팀소트는 이미 부분적으로 정렬된 데이터를 효율적으로 처리하여 데이터 복사와 이동을 최소화합니다. 

 

더 자세한 내용은 듀얼 피벗 퀵소트와 팀소트 글에서 다루도록 하겠습니다. 

 

 

 

 

마무리

이번에는 정렬의 목적과 다양한 정렬 알고리즘의 종류들을 알아봤습니다.

다음에는 정렬 알고리즘의 특징을 정리하고 Java로 실제로 구현해 보겠습니다. 

감사합니다. 

 

 

참고 링크

버블 정렬, 선택 정렬, 삽입 정렬 

https://www.youtube.com/watch?v=Bor_CRWEIXo

 

퀵 정렬

https://www.youtube.com/watch?v=7BDzle2n47c

 

병합 정렬

https://www.youtube.com/watch?v=QAyl79dCO_k

 

듀얼 피벗 퀵소트

https://www.youtube.com/watch?v=mI9lBmzzTyQ

 

 

 

 

  1. 정렬이란? 
  2. 정렬 알고리즘의 종류
  3. 비교 기반이 아닌 알고리즘
  4. 비교 기반 알고리즘
  5. 마무리
  6. 참고 링크
'Algorithm/정렬 알고리즘' 카테고리의 다른 글
  • 계수 정렬 (Counting Sort)
  • 삽입 정렬 (Insertion Sort)
  • 선택 정렬 (Selection Sort)
  • 버블 정렬 (Bubble Sort)
너지살
너지살
너지살
너지살개발자
너지살
전체
오늘
어제
  • 분류 전체보기 (375)
    • 잡식 (2)
      • 티스토리 (2)
    • 개발 일지 (0)
      • OMS 프로젝트 (4)
      • 우테코 6기 프리코스 (1)
    • Git (2)
    • JAVA (15)
      • Java 공부 (6)
      • 자료구조 (4)
      • 도움되는 메모 (4)
    • DevOps (18)
      • AWS (6)
      • Docker (2)
      • Jenkins (1)
      • Nginx (1)
      • Kafka (6)
      • RabbitMQ (2)
    • Spring, Spring Boot (16)
      • Test Code (1)
      • AOP (2)
      • Batch (3)
      • Cache - Redis (5)
      • Cloud Config - 설정 파일 관리 (3)
      • 성능 측정 (1)
      • 예외 처리 (1)
    • BackEnd (1)
      • Spring 공부 (1)
      • Thymeleaft (0)
    • DB (17)
      • JPA (2)
      • DB 공부 (3)
      • DB 포스팅 (4)
      • DB 답장 (1)
      • MySQL (2)
      • Redis (5)
      • MongoDB (0)
    • CS (8)
      • Spring (4)
      • DataBase (3)
      • Java (1)
    • Algorithm (203)
      • 알고리즘 개념 (5)
      • 정렬 알고리즘 (11)
      • 프로그래머스 문제풀이 (18)
      • 백준 문제풀이 (165)
      • 소프티어 문제풀이 (3)
      • 알고리즘 시험 정리 (1)
    • SQL (0)
      • 문법 (1)
      • 프로그래머스 문제풀이 (52)
      • 리트코드 문제풀이 (19)
    • IT (1)
      • IT 공부 (1)
    • 정리 (10)
      • 질문 정리 (10)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준
  • Union-Find
  • 자료구조
  • 크루스칼 알고리즘
  • 병렬 처리
  • 부분탐색
  • 외판원 순회 문제
  • MST
  • 비트마스킹
  • 투 포인터
  • Test code
  • 질문 정리
  • 최소 스패닝 트리
  • Algorithm
  • dynamiceprogramming
  • 소프티어
  • 깊이/너비 우선탐색
  • JPA
  • Java
  • Java 정리
  • DFS
  • Bitmast
  • 최소 신장 트리
  • 경로표현식
  • 알고리즘
  • Spring Boot Redis 연결
  • Spring Boot
  • 투포인트
  • 두 포인터
  • DP
  • redis
  • 다이나믹 프로그래밍
  • 그래프 탐색
  • 그래프 이론
  • dynamic programing
  • 데이터베이스
  • two pointer
  • 우선수위큐
  • docker
  • 분리 집합
  • 유니온파인드
  • git
  • db
  • Next permutation
  • Sorting algorithm
  • 다이나믹프로그래밍
  • 설정
  • cache
  • 다음 순열 찾기
  • Spring Batch

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
너지살
정렬 알고리즘
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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