Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 다이나믹프로그래밍
- CSS
- JS
- 백준nodejs
- 코딩테스트
- 백준골드
- css기초
- 몽고DB
- 백준js
- 자바스크립트
- 프로그래머스코테
- 프로그래머스
- 프로그래머스JS
- js코테
- HTML
- 코테
- 안드로이드 스튜디오
- 백준알고리즘
- HTML5
- 익스프레스
- 리액트
- 백준
- 백준구현
- 리액트댓글기능
- 포이마웹
- 알고리즘
- JS프로그래머스
- 백준구현문제
- dp알고리즘
- 리액트커뮤니티
Archives
- Today
- Total
개발새발 로그
[2023-09-26] TIL - 자료구조 & 알고리즘 - 정렬 본문
정렬
요소들을 일정한 순서대로 열거하는 알고리즘
정렬의 특징
- 정렬 기준은 사용자가 정할 수 있다.
- 크게 비교식과 분산식 정렬로 나눌 수 있다.
- 대부분의 언어가 빌트인으로 제공해준다.
- 삽입, 선택, 버블, 머지, 힙, 퀵 정렬 등 다양한 정렬 방식이 존재한다.
비교식 정렬
버블 정렬
- 서로 인접한 두 요소를 검사하여 정렬하는 알고리즘
- O(n^2) 시간복잡도를 가진다.
버블정렬 이 과정을 반복한다.(가장 큰 수가 뒤로간다.)
function solution(arr){
let answer=arr;
for(let i=0; i<arr.length-1; i++){
for(let j=0; j<arr.length-i-1; j++){
if(arr[j]>arr[j+1]){
[arr[j], arr[j+1]]=[arr[j+1], arr[j]];
}
}
}
return answer;
}
let arr=[13, 5, 11, 7, 23, 15];
console.log(solution(arr));
선택 정렬
- 선택한 요소와 가장 우선순위가 높은 요소를 교환하는 정렬 알고리즘
- O(n^2) 시간 복잡도를 가진다.
function solution(arr){
let answer=arr;
for(let i=0; i<arr.length; i++){
let idx=i;
for(let j=i+1; j<arr.length; j++){
if(arr[j]<arr[idx]) idx=j;
}
[arr[i], arr[idx]] = [arr[idx], arr[i]];
}
return answer;
}
let arr=[13, 5, 11, 7, 23, 15];
console.log(solution(arr));
삽입 정렬
- 선택한 요소를 삽입 할 수 있는 위치를 찾아 삽입하는 방식의 정렬 알고리즘
- O(n^2) 시간 복잡도를 가진다.
function solution(arr){
let answer=arr;
for(let i=0; i<arr.length; i++){
let tmp=arr[i], j;
for(j=i-1; j>=0; j--){
if(arr[j]>tmp) arr[j+1]=arr[j];
else break;
}
arr[j+1]=tmp;
}
return answer;
}
let arr=[11, 7, 5, 6, 10, 9];
console.log(solution(arr));
분산식 정렬
- 요소를 분산하여 정렬하는 방법
분할 정복
- 문제를 작은 2개의 문제로 분리하고 더 이상 분리가 불가능할 때 처리한 후 함치는 전략
- 다양한 알고리즘에 응용된다.
합병 정렬
- 분할 정복 알고리즘을 이용한 최선과 최악이 같은 안정적인 정렬 알고리즘
- O(n log n) 시간 복잡도를 가진다.
퀵 정렬
- 분할 정복 알고리즘을 이용한 매우 빠르지만 최악의 경우가 존재하는 불안정 정렬
- O(n log n) 시간복잡도를 가진다.
자바스크립트의 정렬 방법
오름차순
const arr = [2, 1, 3, 10];
arr.sort(function(a, b) {
return a - b;
});
console.log(arr + '<br>'); // [1, 2, 3, 10]
내림차순
const arr = [2, 1, 3, 10];
arr.sort(function(a, b) {
return b - a;
});
console.log(arr + '<br>'); // [10, 3, 2, 1]
728x90
반응형
LIST
'TIL' 카테고리의 다른 글
[2023-09-27] 자료구조 & 알고리즘 - BFS,DFS (0) | 2023.09.27 |
---|---|
[2023-09-27] TIL - 자료구조 & 알고리즘 - 이진탐색 (0) | 2023.09.27 |
[2023-09-26] TIL - 자료구조 & 알고리즘 - 트라이(Trie) (0) | 2023.09.26 |
[2023-09-26] 자료구조 & 알고리즘 - 힙 (0) | 2023.09.26 |
[2023-09-26] TIL - 자료구조 & 알고리즘 - 트리 (0) | 2023.09.26 |