Daehyunii's Dev-blog

<Udemy 버블 정렬/선택 정렬> TIL-60 본문

✏️ 2022. TIL/August

<Udemy 버블 정렬/선택 정렬> TIL-60

Daehyunii 2022. 8. 6. 21:06

  오늘은 버블 정렬과 선택 정렬에 대해서 공부했다. 알고리즘에 대해서 명확하게 개념 정의가 이뤄지지 않았었는데, 오늘을 기점으로 알고리즘이 무엇인지 조금씩 스스로 개념 정의가 된 것 같다. 우선 기존에 공부했던 내용들은 자바스크립트의 기본 개념에 대해서 공부한 것이고, 그 과정에서 배웠던 메서드들을 활용해서만 코드를 작성한다는 생각에 사로잡혀서 그랬던것 같다. 오늘 공부를 통해 배열을 정렬하는 방식에는 정말 많은 방법이 있다는 것을 알 수 있었다. 그리고 각각의 정렬하는 방법마다 장단점이 많이 있다.

 

  버블 정렬과 선택 정렬의 경우에는 아래 링크를 통해서 정렬 알고리즘 애니메이션을 보았을때, 다른 알고리즘들에 비해 속도가 굉장히 느리다는 것을 시각적으로 확인할 수 있었다. 하지만 이를 공부하는 이유는 비효율적이기에 사용하지 않더라도 정렬 방식을 알고 있어야 다른 정렬들과 비교하여 분석해 볼 수 있기 때문이다.

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

 

Sorting Algorithms Animations

Animation, code, analysis, and discussion of 8 sorting algorithms on 4 initial conditions.

www.toptal.com

  버블 정렬은 배열의 요소들을 순차적으로 두 개씩 비교하고 두 개의 값 중 큰 값이 앞에 있다면 두 값을 스왑한다.(오름차순 정렬의 경우)그리고 한 바퀴를 다 비교하면 결국 가장 큰 배열이 가장 뒤에 정렬하게 된다. 정렬된 배열을 제외하고 나머지 값들에 방금과 같은 작업을 거듭 수행하여 결국 가장 큰 값들부터 뒤에서부터 하나씩 정렬하게 되어 마지막에는 모든 값들이 정렬하게 된다. 

 

  선택 정렬의 경우에는 명칭 그대로 가장 최솟값을 선택해서 이번에는 앞으로 위치시키는 것이다. 루프를 통해서 모든 값을 비교하여 가장 작은 값을 맨 앞에 정렬시키고, 정렬된 값을 제외한 나머지 값들을 또 비교하여 가장 작은 값을 이미 정렬된 값 뒤에 정렬시킨다. 이를 위해 비교를 시작할때 비교의 가장 첫 번째 위치하는 요소를 최솟값으로 가정하고 비교를 시작한다. 

 

  버블 정렬과 선택 정렬을 비교해 보자면 버블 정렬은 비교와 스왑이 계속해서 이뤄지는 반면, 선택 정렬의 경우에는 비교는 많이 하지만 스왑은 적게한다. 무엇이 더 효율적이냐를 확인하고자 빅오 표기법을 비교해 봤을때 효율은 비슷한것 같다. 하지만 위의 링크해 놓은 애니메이션을 통해 봤을때 버블 정렬이 선택 정렬보다는 대부분의 상황에서 빠르게 정렬되는것을 확인할 수 있었다. 물론 다른 정렬 알고리즘들과 비교 했을때 버블 정렬 선택 정렬 모두 느린 정렬 알고리즘에 속하지만, 두 알고리즘만을 비교했을때는 버블 정렬이 더 빨랐다. 이 처럼 평균적인 빅오 표기법의 시간 복잡도가 O(n^2)으로 같음에도 시각적으로 차이가 난다는 것은 놀라운 사실이었다. 이를 크게 본다면 얼마나 상황에 맞는 효율적인 코드를 작성하느냐에 따라 효율의 차이가 엄청나다는것을 알 수 있었다. 그리고 이를 위해 알고리즘 공부를 하는게 중요하다는 것도 정확하게 느낄 수 있었다.

 

 

2022.08.06 - [언어 공부 및 정리/자바스크립트 알고리즘 & 자료구조[Udemy강의]] - 07 버블 정렬

 

07 버블 정렬

지금 부터는 정렬에 대해서 공부하려고 한다. 정렬이란 말 그대로 데이터를 일정한 기준을 가지고 재배열하는 과정을 말한다. 정렬을 하는 방식에는 많은 방법이 존재하고 각각의 정렬 알고리

pinetree93.tistory.com

2022.08.07 - [언어 공부 및 정리/자바스크립트 알고리즘 & 자료구조[Udemy강의]] - 08 선택 정렬

 

08 선택 정렬

8.1 선택 정렬 소개 선택 정렬은 버블 정렬과 비슷하지만 약간의 정렬 방식에 차이점이 있다. 많은 스왑을 통해서 가장 큰 값을 맨 뒤에 위치시키는 대신, 한 번에 모든 요소를 비교하여 가장 작

pinetree93.tistory.com