Top 44 정렬 알고리즘 시간 복잡도 비교 The 152 New Answer

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 정렬 알고리즘 시간 복잡도 비교 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://chewathai27.com/to team, along with other related topics such as: 정렬 알고리즘 시간 복잡도 비교 정렬 알고리즘 종류, 선택정렬 시간복잡도, 버블정렬 시간복잡도, 퀵정렬 시간복잡도, 퀵정렬 알고리즘, 파이썬 정렬 알고리즘, 힙정렬 시간복잡도, 정렬기법


Sorting Algorithms Explained in 10 min
Sorting Algorithms Explained in 10 min


[ 정렬 ] 정렬별 장단점 및 시간복잡도 :: 얍문’s Coding World..

  • Article author: yabmoons.tistory.com
  • Reviews from users: 704 ⭐ Ratings
  • Top rated: 4.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [ 정렬 ] 정렬별 장단점 및 시간복잡도 :: 얍문’s Coding World.. 이번 글에서는 정렬별 장단점 및 시간복잡도를 비교함으로써 어떤 정렬이 … 최악이든 최선이든 이라는 시간복잡도를 갖기 때문에 사실 알고리즘에서 … …
  • Most searched keywords: Whether you are looking for [ 정렬 ] 정렬별 장단점 및 시간복잡도 :: 얍문’s Coding World.. 이번 글에서는 정렬별 장단점 및 시간복잡도를 비교함으로써 어떤 정렬이 … 최악이든 최선이든 이라는 시간복잡도를 갖기 때문에 사실 알고리즘에서 … 이번 글에서는 정렬별 장단점 및 시간복잡도를 비교함으로써 어떤 정렬이 제일 좋고 나쁜지를 알아보자 ! 사실 이 정렬법이 무조건 제일 좋아요 ! 라고 말할 수 있는 정렬법은 없다. 왜냐하면 각 정렬법들이 좋을..Programming
  • Table of Contents:
[ 정렬 ] 정렬별 장단점 및 시간복잡도

티스토리툴바

[ 정렬 ] 정렬별 장단점 및 시간복잡도 :: 얍문's Coding World..
[ 정렬 ] 정렬별 장단점 및 시간복잡도 :: 얍문’s Coding World..

Read More

[Algorithm] 여러 정렬 알고리즘의 특징과 복잡도

  • Article author: jbhs7014.tistory.com
  • Reviews from users: 31303 ⭐ Ratings
  • Top rated: 3.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [Algorithm] 여러 정렬 알고리즘의 특징과 복잡도 ▶️ 데이터를 하나씩 비교하기 때문에 비교 횟수가 많아지므로 시간이 오래 걸린다. 소스코드. 삽입 정렬(Insertion Sort). 삽입 정렬은 … …
  • Most searched keywords: Whether you are looking for [Algorithm] 여러 정렬 알고리즘의 특징과 복잡도 ▶️ 데이터를 하나씩 비교하기 때문에 비교 횟수가 많아지므로 시간이 오래 걸린다. 소스코드. 삽입 정렬(Insertion Sort). 삽입 정렬은 … 몇일 전 모 회사의 인터뷰를 보고 왔다. 이런 저런 질문이 오가던 도중 가장 크게 느낀 것은 ‘내가 아직 “코딩”에는 많이 약하구나’라는 점이었다. 엔지니어로 성장하기 위해서는 당연히 개발자로서의 코딩 실력을..
  • Table of Contents:

🔽

태그

관련글

댓글1

최근댓글

태그

전체 방문자

티스토리툴바

[Algorithm] 여러 정렬 알고리즘의 특징과 복잡도
[Algorithm] 여러 정렬 알고리즘의 특징과 복잡도

Read More

[알고리즘] 각 정렬 알고리즘 비교 📝

  • Article author: velog.io
  • Reviews from users: 36700 ⭐ Ratings
  • Top rated: 3.5 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [알고리즘] 각 정렬 알고리즘 비교 📝 장점. 구현이 쉽다. 인접값만 비교하기에 쉽다. 코드가 직관적이다. 단점. 비효율적이다. 최악, 최선 모두 O(N^2)의 시간복잡도를 갖기에 효율적인 … …
  • Most searched keywords: Whether you are looking for [알고리즘] 각 정렬 알고리즘 비교 📝 장점. 구현이 쉽다. 인접값만 비교하기에 쉽다. 코드가 직관적이다. 단점. 비효율적이다. 최악, 최선 모두 O(N^2)의 시간복잡도를 갖기에 효율적인 … 비교 표 출처 : \[Algorithm] 각 정렬의 특징 및 장단점 & 시간복잡도비교 표 출처 : \[Algorithm] 각 정렬의 특징 및 장단점 & 시간복잡도” 인접 값끼리 비교하며 정렬. i를 length-i-1까지 올리는 정렬 “구현이 쉽다. 인접값만 비교하기에
  • Table of Contents:
[알고리즘] 각 정렬 알고리즘 비교 📝
[알고리즘] 각 정렬 알고리즘 비교 📝

Read More

[Algorithm] 각 정렬의 특징 및 장단점 & 시간복잡도

  • Article author: coding-factory.tistory.com
  • Reviews from users: 5165 ⭐ Ratings
  • Top rated: 4.5 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [Algorithm] 각 정렬의 특징 및 장단점 & 시간복잡도 삽입정렬 (Insertion Sort). 삽입 정렬. 버블정렬이 조금 비효율적인 면이 있기에 비교횟수를 효율적으로 … …
  • Most searched keywords: Whether you are looking for [Algorithm] 각 정렬의 특징 및 장단점 & 시간복잡도 삽입정렬 (Insertion Sort). 삽입 정렬. 버블정렬이 조금 비효율적인 면이 있기에 비교횟수를 효율적으로 …  정렬 별 특징 선택정렬 (Selection Sort) 선택정렬은 앞에서부터 차례대로 정렬하는 방법입니다. 먼저 주어진 리스트 중에 최소값을 찾고 그 값을 맨 앞에 위치한 값과 교체하는 방식으로 진행하는 정렬방법입..
  • Table of Contents:

Header Menu

Main Menu

정렬 별 특징

Sidebar – Right

Copyright © 코딩팩토리 All Rights Reserved

Designed by JB FACTORY

티스토리툴바

[Algorithm] 각 정렬의 특징 및 장단점 & 시간복잡도
[Algorithm] 각 정렬의 특징 및 장단점 & 시간복잡도

Read More

정렬 알고리즘의 장단점과 시간 복잡도 및 공간 복잡도 :: For a better world.

  • Article author: roytravel.tistory.com
  • Reviews from users: 29570 ⭐ Ratings
  • Top rated: 3.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 정렬 알고리즘의 장단점과 시간 복잡도 및 공간 복잡도 :: For a better world. 정렬 알고리즘 특징 및 장단점. 버블 정렬. 장점 : 인접한 값만 계속해서 비교하는 방식으로 구현이 쉬우며, 코드가 직관적이다. n개 … …
  • Most searched keywords: Whether you are looking for 정렬 알고리즘의 장단점과 시간 복잡도 및 공간 복잡도 :: For a better world. 정렬 알고리즘 특징 및 장단점. 버블 정렬. 장점 : 인접한 값만 계속해서 비교하는 방식으로 구현이 쉬우며, 코드가 직관적이다. n개 … 정렬 알고리즘 복잡도 Sorting Algorithm 공간 복잡도 시간 복잡도 최선 최악 최선 평균 최악 Bubble Sort $O(1)$ $O(n)$ $O(n^2)$ $O(n^2)$ $O(n^2)$ Heap Sort $O(1)$ $O(n\times log\ n)$ $O(N\times log\ n)$..My dream is to live for the growth of humanity. I live for helping people who are in need and don’t have equal education opportunities and who have an illness but can’t afford treatment.
  • Table of Contents:
정렬 알고리즘의 장단점과 시간 복잡도 및 공간 복잡도 :: For a better world.
정렬 알고리즘의 장단점과 시간 복잡도 및 공간 복잡도 :: For a better world.

Read More

퀵 정렬(Quick Sort) | 👨🏻‍💻 Tech Interview

  • Article author: gyoogle.dev
  • Reviews from users: 41617 ⭐ Ratings
  • Top rated: 4.3 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 퀵 정렬(Quick Sort) | 👨🏻‍💻 Tech Interview Quick Sort의 시간복잡도와 공간복잡도를 계산할 수 있다. … 정렬에 속하며, 다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬에 속한다. …
  • Most searched keywords: Whether you are looking for 퀵 정렬(Quick Sort) | 👨🏻‍💻 Tech Interview Quick Sort의 시간복잡도와 공간복잡도를 계산할 수 있다. … 정렬에 속하며, 다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬에 속한다. Ready for Tech-Interview
  • Table of Contents:
퀵 정렬(Quick Sort) | 👨🏻‍💻 Tech Interview
퀵 정렬(Quick Sort) | 👨🏻‍💻 Tech Interview

Read More


See more articles in the same category here: 316+ tips for you.

[ 정렬 ] 정렬별 장단점 및 시간복잡도

이번 글에서는 정렬별 장단점 및 시간복잡도를 비교함으로써 어떤 정렬이 제일 좋고 나쁜지를 알아보자 !

사실 이 정렬법이 무조건 제일 좋아요 ! 라고 말할 수 있는 정렬법은 없다. 왜냐하면 각 정렬법들이 좋을 때가 있고 안 좋을 때도 있기 때문이다. 즉, 정렬법들 모두 각각의 장단점이 있기 때문에 무조건 이게 제일 좋다! 라고 말할 수는 없다.

먼저 정렬법들에 대한 구체적인 구현방법 및 설명은 아래 글에 태그해놓겠다.

[ 버블정렬 알아보기 ] / [ 선택정렬 알아보기 ] / [ 퀵정렬 알아보기 ] / [ 힙정렬 알아보기 ] [ 삽입정렬 알아보기 ] / [ 병합정렬 알아보기 ] / [ 셸 정렬 알아보기 ] / [ 기수정렬 알아보기 ] [ 카운팅정렬 알아보기 ]

이제부터는 각 정렬법들의 장단점을 알아보도록 하자.

# 버블정렬(Bubble Sort)

# 장점

– 일단 구현이 쉽다. Bubble정렬은 인접한 값만 계쏙해서 비교하면 되는 방식으로 굉장히 구현이 쉬운 편이다.

– 코드 자체가 직관적이다.

# 단점

– 굉장히 비효율적이다. 최악이든 최선이든 이라는 시간복잡도를 갖기 때문에 사실 알고리즘에서 효율적인

정렬방법으로 사용되지는 않는다.

# 선택정렬(Selection Sort)

# 장점

– 선택정렬 또한 버블정렬과 마찬가지로 구현이 쉬운편에 속하는 정렬법이다.

– 정렬을 위한 비교 횟수는 많지만 실제로 교환하는 횟수는 적기 때문에 많은 교환이 일어나야 하는 자료상태에서 효율적으로

사용될 수 있다.

– 버블정렬과 비교했을 때, 똑같이 이라는 시간복잡도를 갖지만, 실제로 시간을 측정해보면

버블정렬에 비해서는 조금 더 빠른 정렬 방식이다.

# 단점

– 선택정렬 또한 항상 이라는 시간복잡도를 갖기 때문에 시간이 오래걸리는 정렬 방식이다.

# 퀵 정렬(Quick Sort)

# 장점

– 기준값에 의한 분할을 통해서 구현하는 정렬법으로써, 분할 과정에서 logN 이라는 시간이 걸리게되고 전체적으로 보게 되면

NlogN 으로써 실행시간이 준수한 편이다.

# 단점

– 기준값(Pivot)에 따라서 시간복잡도가 크게 달라진다. Pivot이 적당하게 이상적인 값을 선택했다면 NlogN의 시간복잡도를

갖지만, 최악으로 Pivot을 선택할 경우 이라는 시간복잡도를 갖게 된다.

# 힙 정렬(Heap Sort)

# 장점

– 추가적인 메모리를 필요로 하지 않으면서 항상 O(NlogN) 이라는 시간복잡도를 가지는 굉장히 정렬법들 중에서

효율적인 정렬법이라고 볼 수 있다. 퀵 정렬도 굉장히 효율적이라고 볼 수 있지만 최악의 경우 시간이 오래걸린다는

단점이 있지만 힙 정렬의 경우 항상 O(NlogN) 으로 보장된다는 장점이 있다.

# 단점

– 하지만 이상적인 경우에 퀵정렬과 비교했을 때 똑같이 O(NlogN)이 나오긴 하지만 실제 시간을 측정해보면 퀵정렬보다

느리다고 한다. 즉, 데이터의 상태에 따라서 다른 정렬법들에 비해서 조금 느린 편이다.

또한, 안정성(Stable)을 보장받지 못한다는 단점이 있다.

# 삽입정렬(Insertion Sort)

# 장점

– 최선의 경우 O(N)이라는 엄청나게 빠른 효율성을 가지고 있다.

– 성능이 좋아서 다른 정렬 알고리즘의 일부로 사용될 만큼 좋은 정렬법이다.

# 단점

– 최악의 경우 이라는 시간복잡도를 갖게된다. 즉, 데이터의 상태 및 데이터의 크기에 따라서

성능의 편차가 굉장히 심한 정렬법이다.

# 병합정렬(Merge Sort)

# 장점

– 퀵소팅과 비슷하게 원본 배열을 반씩 분할해가면서 정렬하는 정렬법으로써 분할 하는 과정에서 logN 만큼의 시간이 걸린다.

즉, 최종적으로 보게되면 NlogN 이 된다.

– 퀵소팅과 달리, Pivot을 설정하거나 그런 과정 없이 무조건 절반으로 분할하기 때문에 Pivot에 따라서 성능이 안좋아지거나

하는 경우가 없다. 따라서 항상 O(NlogN) 이라는 시간복잡도를 갖게된다. 이는 정렬법들 중에서 매우 준수한 수준이다.

# 단점

– 장점만 본다면 퀵 보다는 무조건 병합정렬을 사용하는 것이 좋다고 생각할 수 있지만 가장 큰 단점은 ‘추가적인 메모리 필요’

이다. 병합정렬은 임시배열에 원본맵을 계속해서 옮겨주면서 정렬을 하는 방법이다.

즉, ‘추가적인 메모리를 할당할 수 없을 경우, 데이터가 최악으로 있다면 병합 vs 퀵 정렬법 중 무엇을 써야할까?’ 라고 물으면

데이터가 최악인 것만 본다면 퀵보다는 병합정렬이 훨씬 빠르기때문에 병합정렬을 사용하는것이 많지만, 추가적인

메모리를 할당할 수 없다면 병합정렬은 사용할 수 없기 때문에 퀵을 사용해야 하는 것이다.

# 쉘 정렬(Shell Sort)

# 장점

– 삽입정렬의 단점을 보완해서 만든 정렬법으로 삽입정렬도 성능이 뛰어난 편이지만 더 뛰어난 성능을 갖는 정렬법이다.

# 단점

– 일정한 간격에 따라서 배열을 바라봐야 한다. 즉, 이 ‘간격’을 잘못 설정한다면 성능이 굉장히 안 좋아질수 있다.

# 기수정렬(Radix Sort)

# 장점

– 정렬법들 중에서 O(N) 이라는 말도안되는 시간복잡도를 갖는 정렬법으로써 일단 엄청나게 빠르다.

– 정렬법에서 O(NlogN)을 깰 수 있는 방법은 없다고 알려져있는데, 그 방법을 깨는 유일한 방법이 기수정렬법이다.

# 단점

– ‘버킷’ 이라는 추가적인 메모리가 할당되어야 한다. 즉, 메모리가 엄청나게 여유롭다면 상관이 없겠지만 메모리가 생각보다

많이 소비되는 정렬법이다.

– 데이터 타입이 일정한 경우에만 가능하다. 기존에 정렬법들은 음수와 양수, 실수와 정수가 섞여 있더라도 비교를 하려면

할 수 있었지만, 기수정렬의 경우 양의 정수는 양의 정수끼리만, 음의 정수는 음의 정수끼리만 정렬이 가능하다.

– 즉, 엄청나게 빠른 대신에 구현을 위한 조건이 굉장히 많이 붙기 때문에 그렇게 많이 사용되는 방법 같지는 않다.

# 카운팅정렬(Counting Sort)

# 장점

– 이 정렬법도 비교를 하지 않고 정렬하는 법으로 O(N) 이라는 시간복잡도를 갖게 된다.

– 일단, O(N)이라는 것 자체만으로도 정렬법 중에서 엄청나게 빠른 편에 속하고 이것이 장점으로 작용한다.

# 단점

– 숫자 갯수를 저장해야 될 별도의 공간, 또 결과를 저장할 별도의 공간 등 추가적인 메모리가 필요하다.

– 또한, 하나의 값 때문에 메모리의 낭비를 많이 하게 될 수도 있다. 예를 들면 다음과 같은 경우이다.

[ 1, 2, 3, 4, 5, 99999999999 ] 이 경우에는 99999999999 때문에 숫자의 갯수를 저장해야 될 배열의 크기가

최소 [ 99999999999 ] 보다는 커야 하고, 결과적으로 안 쓰는 낭비되는 인덱스들이 많이 발생하게 된다.

# 총정리

# 시간복잡도 총정리

– 참고로 시간복잡도의 빠르기는 다음과 같습니다.

O(1)이 가장빠르고, O(N!)이 가장 느립니다 !

[Algorithm] 여러 정렬 알고리즘의 특징과 복잡도

몇일 전 모 회사의 인터뷰를 보고 왔다. 이런 저런 질문이 오가던 도중 가장 크게 느낀 것은 ‘내가 아직 “코딩”에는 많이 약하구나’라는 점이었다. 엔지니어로 성장하기 위해서는 당연히 개발자로서의 코딩 실력을 기본으로 갖추어야 한다는 것은 항상 생각하고 있었다. 하지만 어쩌면 내가 너무 앞서 나가고 있는지도 모르겠다. 기본부터 차근차근 쌓으며 실전 개발 경험을 늘리면서 공부하기로 다짐했다.

차근차근 첫번째로 알고리즘의 기본이며 시작이라고 할 수 있는 정렬의 특징을 정리한다.

📌 각각의 정렬 알고리즘 특징

📍 선택 정렬(Selection Sort)

선택 정렬은 앞쪽부터 정렬하는 방식이다. 주어진 배열에서 가장 작은 최소값을 찾고 배열의 맨 앞의 값과 위치를 바꾸면서 정렬한다. 선택 정렬은 배열의 최솟값을 찾아 선택하여 정렬한다는 뜻에서 이름이 붙여졌다. 배열에서 최솟값을 찾아야 하기 때문에 비교 횟수는 많지만 실제로 값을 바꾸는 교환 횟수가 적다는 것이 특징이다.

👍 장점

▶️ 구현이 간단하다.

▶️ 데이터를 하나씩 비교하기 때문에 정밀한 비교가 가능하다.

▶️ 비교하는 횟수에 비해 교환하는 횟수가 적다.

👎 단점

▶️ 데이터를 하나씩 비교하기 때문에 시간이 오래 걸린다.

▶️ 정렬된 상태에서 새로운 데이터가 추가되면 정렬 효율이 좋지 않다.

소스코드

📍 버블 정렬(Bubble Sort)

버블 정렬은 첫번째 원소부터 인접한 원소와 비교하며 자리를 바꾸면서 맨 끝부터 정렬하는 방식이다. i번째 원소와 i+1번째 원소의 값을 비교하고 만약 i번째의 값이 i+1번째의 값보다 크다면 둘의 자리를 바꾸어 값이 큰 원소가 뒤에 위치하게 한다. 이를 반복해서 수행하면 가장 큰 값부터 뒤쪽에 쌓이게 된다. 즉 가장 큰값을 하나씩 뒤로 보내면서 뒤쪽부터 정렬한다. 버블 정렬은 정렬 방식이 마치 물속에서 올라오는 물방울과 같다고 하여 버블 정렬이라는 이름이 붙여졌다.

👍 장점

▶️ 구현이 간단하다.

▶️ 데이터를 하나씩 비교하기 때문에 정밀한 비교가 가능하다.

👎 단점

▶️ 데이터를 하나씩 비교하기 때문에 비교 횟수가 많아지므로 시간이 오래 걸린다.

소스코드

📍 삽입 정렬(Insertion Sort)

삽입 정렬은 버블 정렬의 비효율성을 개선하기 위해 등장한 방법이다. 버블 정렬은 i번째와 i+1번째를 비교하며 위치를 바꾸었다면 삽입 정렬은 i번째 원소를 정렬된 상태의 앞부분과 비교하여 적절한 위치에 삽입하는 방식이다. i-1번째 원소까지는 모두 정렬된 상태여야 하며 i-1번째부터 0번째 원소와 i번째 원소를 각각 비교한다. 이때 i번째 원소보다 작은 값이 발견되면 그 위치에 i번째 원소를 삽입한다. 삽입 정렬은 버블 정렬의 비교 및 교환 횟수를 줄임으로써 높은 효율을 보여준다.

👍 장점

▶️ 입력으로 들어오는 배열의 원소가 정렬되어있을수록 속도가 빠르다.

▶️ 정렬된 값은 교환이 일어나지 않는다.

👎 단점

▶️ 삽입을 구현해야 하므로 속도가 자료구조의 영향을 많이 받는다.

▶️ 입력으로 들어오는 배열이 역순으로 정렬된 경우 성능이 굉장히 좋지 않다.

소스코드

📍 병합 정렬(Merge Sort)

병합 정렬은 배열을 작은 단위로 쪼개어 정렬한 결과를 합치면서 전체를 정렬하는 방식이다. 배열을 왼쪽 절반, 오른쪽 절반으로 분할하여 최소 단위로 쪼갠 후 정렬을 진행한다. 대부분의 경우 병합 정렬은 상당한 안정성을 가지기 때문에 좋은 성능을 보인다. 하지만 작은 단위로 쪼갠 배열을 저장할 공간을 사용하기 때문에 추가적인 메모리가 필요하다.

👍 장점

▶️ 항상 일정한 시간 복잡도(O(NlogN))를 가진다.

▶️ 안정적이며 대부분의 경우에서 좋은 성능을 낸다.

👎 단점

▶️ 추가 메모리 공간이 필요하다.

소스코드

📍 퀵 정렬(Quick Sort)

퀵 정렬은 하나의 축(pivot)을 정해서 이 축보다 작은 값은 왼쪽에 큰값은 오른쪽에 위치시킨다. 그리고 왼쪽과 오른쪽에 해당하는 원소들에 대해 다시 축을 각각 정하고 마찬가지로 그 안에서 작은 값은 왼쪽에 큰값은 오른쪽에 위치시킨다. 실제로 많이 사용하고 있는 정렬 알고리즘으로 알려져 있다. 일반적으로 준수한 효율을 보이지만 최악의 경우에는 훨씬 많은 시간이 소요되므로 안정성이 좋지 않다는 특징이 있다. 대부분의 내장 라이브러리에서 존재하는 정렬 함수는 퀵 정렬 알고리즘을 사용한다.

👍 장점

▶️ 평균 실행 시간이 빠르다.

👎 단점

▶️ 축(pivot)을 어떻게 설정하느냐에 따라 성능의 차이가 심하다.

▶️ 안정성이 좋지 않다.

소스코드

📍 힙 정렬(Heap Sort)

힙 정렬은 최대 힙 트리(Max Heap Tree)나 최소 힙 트리(Min Heap Tree)를 구성하여 정렬하는 방식이다. 여기서 ‘힙(Heap)’이라는 자료구조가 사용되는데 힙은 완전 이진 트리의 일종으로 우선순위 큐를 위해 만들어진 자료구조이다. 여러 개의 값중에서 최댓값이나 최솟값을 빠르게 찾기 위해 사용된다. 최대 힙 트리는 부모 노드의 키 값이 자식 노드의 키 값보다 크거나 같은 완전 이진 트리이며 최소 힙 트리는 부모 노드의 키 값이 자식 노드의 키 값보다 작거나 같은 완전 이진 트리이다.

힙 정렬을 통해 내림차순으로 정렬하기 위해서는 최대 힙 트리를 구성하고 오름차순으로 구성하기 위해서는 최소 힙 트리를 구성한다. 먼저 입력으로 들어오는 배열로 힙 트리를 만든다. 그 후 root 노드를 하나씩 꺼내어 배열의 뒤쪽부터 넣는다. 빈 root 노드 자리에는 힙 트리의 가장 뒤에 있는 원소가 들어가서 자기 자리를 찾아간다. 즉 힙 트리로 구한 최댓값 혹은 최솟값에 해당하는 root 노드를 빼내면서 정렬을 수행한다.

👍 장점

▶️ 항상 같은 시간 복잡도를 가지기 때문에 성능이 준수하다.

👎 단점

▶️ 같은 시간 복잡도를 가지는 다른 정렬 알고리즘과 비교하면 느린 편이다.

소스코드

📍 셸 정렬(Shell Sort)

셸 정렬은 삽입 정렬의 문제점을 해결하기 위해 등장한 방법이다. 입력으로 들어온 배열을 간격(gap)이라고 하는 일정한 기준에 따라 분류한다. 이를 통해 연속적이지 않은 여러 개의 부분 배열을 생성한 후 각 배열을 삽입 정렬로 정렬한다. 모든 배열이 정렬되면 다시 전체 배열을 여러 개의 부분 배열로 나누는데 이때 간격을 전 단계보다 더 작게 설정하여 생성되는 부분 배열의 개수를 전 단계보다 적게 만든다. 그 후 부분 배열의 개수가 1이 될 때까지 앞의 과정을 반복한다.

👍 장점

▶️ 삽입 정렬의 문제점을 해결함으로써 성능이 좋다.

👎 단점

▶️ 설정한 간격(gap)에 따라 성능의 차이가 심하다.

소스코드

📌 시간 복잡도 & 공간 복잡도

각 정렬 알고리즘의 시간 복잡도와 공간 복잡도는 아래와 같다.

알고리즘 시간 복잡도 공간 복잡도 평균(Average) 최선(Best) 최악(Worst) 선택 정렬 O(N^2) O(N^2) O(N^2) O(N^2) 버블 정렬 O(N^2) O(N) O(N^2) O(N) 삽입 정렬 O(N^2) O(N) O(N^2) O(N^2) 병합 정렬 O(NlogN) O(NlogN) O(NlogN) O(NlogN) 퀵 정렬 O(NlogN) O(NlogN) O(N^2) O(NlogN) 힙 정렬 O(NlogN) O(NlogN) O(NlogN) O(NlogN) 셸 정렬 O(N^1.5) O(N) O(N^2) O(N)

아래 사이트에서 모든 정렬의 동작 과정을 확인할 수 있고 속도도 비교해볼 수 있다.

https://www.toptal.com/developers/sorting-algorithms

🔽

이상으로 다양한 알고리즘의 정렬 동작 과정과 특징, 그리고 시간 복잡도와 공간 복잡도에 대해 알아보았다.

참고

https://coding-factory.tistory.com/615

[Algorithm] 각 정렬의 특징 및 장단점 & 시간복잡도

정렬 별 특징

선택정렬 (Selection Sort)

선택정렬은 앞에서부터 차례대로 정렬하는 방법입니다. 먼저 주어진 리스트 중에 최소값을 찾고 그 값을 맨 앞에 위치한 값과 교체하는 방식으로 진행하는 정렬방법입니다. 코드가 직관적이기에 구현도 비교적 간단합니다. n개 원소에 대해 n개의 메모리를 사용하기에 데이터를 하나씩 정밀 비교가 가능하며 정렬을 위한 비교 횟수는 많으나 교환 횟수는 상당히 적다는 것이 장점인 정렬 방식입니다. 따라서 교환이 많이 이루어져야하는 자료 상태에서 가장 효율적으로 적용될 수 있는 정렬 방식입니다. 선택 정렬이 가장 적합한 자료 상태는 역순 정렬입니다. 즉, 내림차순으로 정렬되어 있는 자료를 오름차순으로 재정렬할 때 최적의 효율을 보여줍니다. 반대로 이미 정렬된 상태에서 소수의 자료가 추가됨으로 재정렬하게 되는 때에는 최악의 처리 속도를 보여준다는 단점도 있습니다.

버블정렬 (Bubble Sort)

버블정렬은 첫 번째 원소부터 인접한 원소끼리 계속 자리를 교환하면서 맨 끝부터 정렬하는 방식을 말합니다. 마찬가지로 코드가 간단하므로 구현이 간편합니다. 정렬을 하는 방식이 물속에서 물위로 올라오는 물방울 모양과 같다하여 버블정렬이라고 합니다. n개의 원소에 대하여 n개의 메모리를 사용합니다. 데이터를 하나씩 비교할 수 있어서 정밀하게 비교가 가능하나 비교횟수가 많아지므로 성능면에서는 좋은 방법이 아닙니다. 첫 번째 원소부터 마지막 원소까지 반복하여 한 단계가 끝나면 가장 큰 원소를 마지막 자리로 정렬하는 식으로 정렬이 됩니다.

삽입정렬 (Insertion Sort)

버블정렬이 조금 비효율적인 면이 있기에 비교횟수를 효율적으로 줄이기 위해서 고안된 방법이 삽입정렬입니다. 삽입 정렬은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 정렬 방법입니다. 버블정렬은 비교대상의 메모리 값이 정렬되어 있음에도 불구하고 비교연산을 하는 부분이 있는데 삽입정렬은 기본적으로 버블정렬의 비교횟수를 줄이고 크기가 적은 데이터 집합을 정렬하는 루팅을 작성할 시 버블정렬보다 탁월한 성능 효율을 보여줍니다. 정렬된 값은 한번도 교환이 일어나지 않고 N-1의 비교만 일어납니다.

합병 정렬 (Merge Sort)

작은 단위로 잘게 쪼개어 작은 단위부터 정렬해서 정렬된 단위들을 계속 병합해가면서 정렬하는 방식입니다. 알고리즘 중에 가장 간단하고 쉽게 떠올릴 수 있는 방법이며 안정성이 있여 상당히 좋은 성능을 나타냅니다. 하나 큰 결점이 있다면 공간이 많이 필요하다는 점입니다. 정렬을 하기 위해서는 데이터 전체 크기만한 메모리가 더 필요합니다.

퀵 정렬 (Quick Sort)

연속적인 분할에 의한 정렬방식입니다. 처음 하나의 축(Pivot)을 먼저 정하여 이 축의 값보다 작은 값은 왼쪽에 큰 값은 오른쪽으로 위치시킨뒤 왼쪽과 오른쪽의 수 들은 다시 각각의 축으로 나누어져 축값이 1이 될 때까지 정렬합니다. 가장 많이 사용되는 정렬법이나 안정성이 떨어진다는 단점이 있습니다.

힙정렬 (Heap Sort)

힙 정렬은 최대 힙 트리나 최소 힙 트리를 구성해 정렬을 하는 방법입니다. 이진 완전 나무를 배열에다 접목시킨 절묘한 알고리즘입니다. 처음에는 나무 아래에서 위로 각 원소들을 최대값 힙 조건에 맞게 정리한 뒤, 나무 뿌리에 있는 자료를 차례차례 나무 뒤로 옮기면서 힙을 정렬된 배열로 바꿉니다. 뿌리에는 힙 나무 맨 뒤에 있던 원소가 왔다가, 다시 힙 조건에 맞는 위치로 내려갑니다. 시간복잡도가 O(nlogn)인 정렬 알고리즘 중에서는 부가적인 메모리가 전혀 필요없다는 게 큰 장점인 정렬 방식입니다.

쉘 정렬 (Shell Sort)

삽입정렬의 개념을 확대하여 일반화한 정렬방법입니다. 알고리즘이 간단하여 프로그램으로 쉽게 구현할 수 있습니다. 수행 능력도 삽입 정렬보다 우수한 것으로 평가합니다. 멀리 있는 레코드들끼리 비교 및 교환될 수 있으므로, 어떤 데이터가 제 위치에서 멀리 떨어져 있다면 여러 번의 교환이 발생하는 버블정렬 방식의 단점을 해결할 수 있습니다.

기수 정렬(Radix Sort)

데이터의 비교를 통한 정렬이 아닌 분산 정렬을 이용한 정렬 방법이며 자릿수가 있는 데이터(정수, 문자열 등)에만 사용 가능합니다. 각 자리수를 기준으로 점차 정렬을 진행합니다.

정렬 별 장단점 비교

정렬 별 시간복잡도, 공간복잡도 비교

정렬 종류 시간 복잡도 공간 복잡도 평균(Average) 최선(Best) 최악(Worst) 선택 정렬 O ( n 2 ) O ( n 2 ) O ( n 2 ) O ( n 2 ) 버블 정렬 O ( n 2 ) O ( n 2 ) O ( n 2 ) O ( n ) 삽입 정렬 O ( n 2 ) O ( n) O ( n 2 ) O ( n 2 ) 합병 정렬 O ( n × l o g n ) O ( n × l o g n ) O ( n × l o g n ) O ( n × l o g n ) 퀵 정렬 O ( n × l o g n ) O ( n × l o g n ) O ( n 2 ) O ( n × l o g n ) 힙 정렬 O ( n × l o g n ) O ( n × l o g n ) O ( n × l o g n ) O ( n × l o g n ) 쉘 정렬 O(N^1.25) O(N^1.25) O(N^1.25) O ( n ) 기수 정렬 O(dn) O(dn) O(dn)

정렬 별 속도 비교

So you have finished reading the 정렬 알고리즘 시간 복잡도 비교 topic article, if you find this article useful, please share it. Thank you very much. See more: 정렬 알고리즘 종류, 선택정렬 시간복잡도, 버블정렬 시간복잡도, 퀵정렬 시간복잡도, 퀵정렬 알고리즘, 파이썬 정렬 알고리즘, 힙정렬 시간복잡도, 정렬기법

Leave a Comment