정렬 알고리즘 정리(With Big O Notation)

Aske
4 min readMar 2, 2019

--

늘.. 남이 정리해둔 것만 보던 생활을 접고 정리도 할겸 미디엄을 시작하기로 한 2019년

첨 올리는 글은 바로 정렬 알고리즘 정리이다..

정렬 알고리즘을 알기 전에 Big O 와 각 Big O 표기법의 성능에 대해 간단히 알아보자.

  • big O : 알고리즘의 퍼포먼스를 나타내는 표기법
  • 시간복잡도, 공간복잡도로 나뉘어지며 시간복잡도는 알고리즘 수행시간에 대한 퍼포먼스 표기이며, 공간복잡도는 알고리즘을 수행할 때 필요한 공간(리소스)에 대한 퍼포먼스 표기이다.
  • 시간복잡도는 아래 순으로 퍼포먼스를 판단하며 값이 작을 수록 빠른 시간에 결과가 나온다는 말 ( 퍼포먼스가 좋다 )
  • O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(2ⁿ) < O(n!) < O(nⁿ)

1. Bubble Sort

버블정렬은 가장 쉬운 알고리즘이다.

처음부터 끝까지 자신과 자신의 다음 데이터를 비교해가면서 가장 큰 수를 맨 뒤로 보내는 식으로 동작하는 알고리즘이다.

  • 배열 전체를 순회하며 비교하기 때문에 시간복잡도는 O(n²)이며
  • 배열 하나만 사용하기 때문에 공간복잡도는 O(1) 이다.
위 코드는 역정렬로 작은수를 제일 앞으로 꺼내면서 정렬하는 로직

2. Selection Sort

선택정렬이라고도 불리며, 배열의 가장 작은 값을 가지는 인덱스를 찾아서 가장 작은 값을 앞에서부터 채워나가면서 정렬하는 방식.

  • for loop 2번을 통해 배열을 훑고, swap하는 방식으로 시간복잡도는 O(n²)
  • 공간복잡도는 O(1) 이다.

3. Insertion Sort

삽입정렬이라고 불리며, 최소값을 찾아서 이하 배열들의 원소와 비교하여 자신이 위치해야할 곳을 찾아 삽입해나가며 정렬하는 방식이다.

  • for loop 혹은 while loop를 2중첩으로 구현되어 시간복잡도는 O(n²)
  • 공간복잡도는 O(1) 이다.

4. Merge Sort

병합정렬이라고도 불리며, 배열을 반씩 쪼개서 하나의 원소를 가진 배열로 만든 후 비교를 통해 각 배열을 정렬하여 병합하여 최종 정렬된 배열을 구하는 정렬방식이다.

  • 배열을 반씩 쪼개며 정렬을 하고 다시 그것을 병합하는 방법으로 시간복잡도는 O(nlogn)이다.
  • 공간복잡도는 O(n) 이다.

5. Quick Sort

병합정렬과 어찌보면 비슷한 로직으로 돌아가는 정렬이며, 기준이 되는 기준점을 가지고 앞/뒤 배열로 쪼개서 각 앞/뒤배열을 기준값 보다 작은수를 앞으로 몰고 기준값보다 큰 수를 재귀함수를 통해 뒤로 몰아가는 정렬방식

  • 배열을 기준점으로 나누어 해당 기준값을 기준으로 좌,우의 배열을 다시한번 탐색하며 정렬하는 방식으로 시간복잡도는 O(nlogn)
  • 공간복잡도는 O(n) 이다.

공부하면서 정리했는데, 완벽히 손코딩을 할 정도는 아닌것같아서 자주 복습하기위해 자료를 남기며 마칩니다.

--

--