정렬이란?
원소들을 번호순이나 사전 순서와 같이
일정한 순서대로 열거하는 것을 의미합니다.
이러한 정렬을 위해 효율적인 문제 해결 과정을
정렬 알고리즘((Sorting Algoritm)
이라고 합니다.
그럼 정렬을 왜 해야 할까요?
사실 알고리즘이라는 목표는
효율적인 문제 해결을 위함입니다.
어떤 문제냐에 따라 방식과 결과물이 다르겠지만
결국에는 가장 빠르고 효율적인 작동을
하나의 목표로 합니다.
그러기 위해서는 효율적으로
데이터를 저장하는 방법을 이해해야 하고 (자료구조)
저장된 데이터를 효율적으로 찾을 수 있어야 합니다.
시간 복잡도에 대해 알아보면서,
효율적이고 정말 빠른 예시 중 이진 검색 기억하시나요?
이진 검색 또는 검색에 특화된 이진 탐색 트리는
데이터가 정렬이 되어 있다는 가정하에
해당 검색 방식을 사용할 수 있습니다.
이처럼
데이터의 정렬은 필수적이고
이를 위한 정렬 알고리즘이
중요하게 필요한 것입니다.
정렬 알고리즘 종류
위 사진은 각 정렬 알고리즘에 따른
속도 비교를 2배속으로 빠르게 감기한 움짤입니다.
위에서 비교한 정렬은 아래와 같습니다.
삽입 정렬(Insertion Sort), 선택 정렬(Selection Sort), 버블 정렬(Bubble Sort),
셸 정렬(Shellsort), 합병 정렬(Merger Sort), 힙 정렬(Heap Sort), 퀵 정렬(Quick Sort)
이러한 알고리즘은
비교정렬에 속하는데,
비교 정렬은 하나의 추상적인 비교 동작을 통해
목록 요소들을 읽어내는 정렬 알고리즘의 일종입니다.
사실 이외에도 정말 다양한 정렬 알고리즘이 존재합니다. (아래 참조)
하지만, 위에서 나열한 정렬 알고리즘이
프로그래밍에서 가장 기본이 되는 정렬 알고리즘입니다.
하나씩 천천히 알아보면서
프로그래밍의 사고력을 좀 더 넓게
가져야겠습니다.
'Development > 알고리즘' 카테고리의 다른 글
[3][알고리즘 - 정렬] 선택정렬(Selection Sort)이란? javascript 구현 (0) | 2021.11.19 |
---|---|
[2][알고리즘 - 정렬] 버블정렬(Bubble Sort)이란? javascript 구현 (0) | 2021.11.18 |
[알고리즘 - 시간복잡도] 시간복잡도(Time Complexity)란? Bic-O표기법 (0) | 2021.11.16 |
[12] [알고리즘 - 자료구조] 파일구조란? 순차파일, 색인파일, 직접파일 (0) | 2021.11.16 |
[11] [알고리즘 - 자료구조] 그래프(graph)란? (비선형구조) javascript 구현 (0) | 2021.11.15 |