쉘 정렬 Shell Sort

Jace·2023년 1월 2일
0

쉘 정렬(Shell Sort)

삽입 정렬의 장점은 살리면서 단점은 보완한 알고리즘
삽입 정렬의 최대 문제점

  • 요소들이 삽입될 때, 이웃한 위치로만 이동 -> 즉, 만약 삽입되어야 할 위치가 현재 위치에서 상당히 멀리 떨어진 곳이라면 많은 이동을 해야만 제자리로 갈 수 있음.
  • 쉘 정렬은 삽입 정렬과 다르게 전체의 리스트를 한 번에 정렬하지 않음

구현 방식

  • 정렬할 배열을 일정한 기준(간격)에 따라 분류
  • 각 부분 배열을 삽입 정렬로 정렬
  • 다시 전체 배열을 더 적은 개수의 부분 배열로 분류
  • 위 2번째 3번째 과정을 부분 배열의 길이가 1이 될 때까지 반복한다.

시간복잡도는 최적 O(n), 평균 O(n^1.5), 최악 O(n^2)
공간복잡도 O(n)

장점

  • 연속적이지 않은 리스트의 자료 교환이 일어나면 더 큰 거리를 이동 -> 따라서 교환되는 요소들이 삽입 정렬보다 최종 위치에 있을 가능성 높음
  • 삽입 정렬, 거품 정렬에 비해 정렬 속도가 빠르다
  • 간격 시퀀스가 좋을 경우 O(nlogn) 정도로 좋은 속도 보장

단점

  • 삽입 정렬에 비해 구현이 어려움
  • 간격 시퀀스에 영향을 많이 받으며 적절한 시퀀스를 선택해야함
  • 일정 간격을 두고 교환이 이루어지기에 안정 정렬이 아니다

너무 소심하고 까다롭게 자신의 행동을 고민하지 말라 . 모든 인생은 실험이다 . 더많이 실험할수록 더나아진다. – 랄프 왈도 에머슨

profile
오늘한줄.

0개의 댓글