일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 구멍가게코딩단
- 목록처리
- resttemplate
- 자바편
- 서버설정
- 리눅스
- Kernighan의 C언어 프로그래밍
- 친절한SQL튜닝
- 스프링부트핵심가이드
- d
- /etc/network/interfaces
- 자료구조와함께배우는알고리즘입문
- ㅒ
- 선형대수
- 자료구조와 함께 배우는 알고리즘 입문
- GIT
- 코드로배우는스프링웹프로젝트
- baeldung
- 이터레이터
- 스프링 시큐리티
- 티스토리 쿠키 삭제
- 코드로배우는스프링부트웹프로젝트
- 페이징
- iterator
- 알파회계
- 데비안
- 네트워크 설정
- 처음 만나는 AI수학 with Python
- 처음 만나는 AI 수학 with Python
- network configuration
- Today
- Total
목록Algorithm&Data structure/JS alg. (18)
bright jazz music
자바스크립트에서는 기본적으로 정렬 함수를 제공한다. 가장 대표적인 정렬 메서드는 Array.prototype.sort()이다. 이 메서드는 기본적으로 모든 배열에 사용할 수 있고, 아래와 같은 방식으로 사용한다. const array1 = [5, 7, 2, 9, 6, 13];const array2 = ['red', 'blue', 'yellow', 'green']console.log(array1.sort());console.log(array2.sort());/*[ 13, 2, 5, 6, 7, 9 ][ 'blue', 'green', 'red', 'yellow' ]*/ 배열에 sort() 메서드를 호출하면 호출한 배열이 정렬된다. 원소가 숫자 또는 문자인 경우 모두 쉽게 정렬이 가능하다. 따라서 실제로는 정렬..
기수 정렬은 자릿수를 기반으로 정렬한다.가령 숫자의 일의 자리, 십의 자리, 백의 자리와 같은 자릿수이다. 당연히 두 자리 숫자는 한 자리 숫자보다 크고 세 자리 숫자보다 작다.보통 기수 정렬은 10진수를 기반하여 설명하고 사용하지만 원리를 이해하면 다른 진법에서도 적극적으로 활용하 수 있다. 기수 정렬의 작동 순서1단계: 가장 작은 자릿수부터 가장 큰 자릿수까지 반복하여 비교한다.(값 그 자체가 아니라 자릿수를 비교함에 주의)2단계: 각 자릿수를 기준으로 입력 배열을 정렬한다.3단계: 각 자릿수별로 정렬된 배열을 합쳐 정렬을 완료한다.function radixSort(arr) { // 최대값 찾기 const maxNum = Math.max(...arr); // 현재 자릿수 (1의..
힙 정렬은 최댓값, 최솟값을 찾는 데 특화된 정렬 방법이다. 해결해야 할 문제가 최대, 최솟값을 찾아내는 것이라면 힙 정렬을 사용해야 할 수도 있다. 힙(heap):힙은 최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된 완전 이진트리(complete binary tree)를 기본으로 한 자료구조(tree-based structure)이며 힙 속성을 만족한다. 완전 이진 트리(complete binary tree):완전 이진트리는 각각의 노드가 최대 "두 개"의 자식 노드를 가지는 트리 자료구조이다. 가장 위에 존재하는 노드를 루트 노드(root node)라고 한다. 이진트리에는 레벨이 존재한다. 루트 노드가 위치하는 가장 상단 레벨부터 Level 0 이다. 내려갈수록 레벨이 증가한다.이진트리에..
퀵 정렬은 비교 정렬에 속한다. 비교 정렬이란 버블 정렬과 같은 분류인데, 버블정렬이 자신의 다음 인덱스의 원소와 비교해 정렬해 나가는 것처럼 퀵 정렬은 피벗(pivot)을 선택하여 비교 기준점을 만들고 비교하며 정렬을 진행한다. 퀵 정렬은 3단계로 진행된다. 1단계: 배열 중 원소 하나를 선택한다. 이 원소를 피벗이라고 한다.2단계: 피벗 앞에는 피벗보다 작은 값의 원소를 두고, 피벗 뒤에는 값이 큰 원소들이 오도록 배열을 '분할'한다. 분할 후 피벗의 위치는 변경되지 않는다.분할된 2개의 작은 배열에 대해 앞의 과정을 반복한다. 배열의 크기가 0 또는 1이 될 때까지 반복한다. 퀵 정렬과 합병정렬은 유사해 보이지만 차이가 있다. 합병정렬은 언제나 배열을 균등하게 절반으로 나누어 비교하지만, 퀵 정렬은..
합병(병합)정렬은 분할 정복 알고리즘 중 하나이며, 일반적으로 데이터의 안정성을 훼손하지 않는다.분할 정복은 크게 3단계로 구성된다. 1) 분할(Divide): 최소단위까지 문제를 분할한다.2) 정복(Conquer): 최소 단위 문제를 각각 해결하여 정복한다.3) 결합(Combine): 최소 단위 문제에 대한 결과를 원래 문제에 대한 결과로 조합하여 해결한다. 분할-정복의 3단계:1단계: 배열을 계속해서 반으로 자른다. 원소가 1개가 될 때가지 자른다.2단계: 자른 순서의 역순으로 한 쌍씩 값을 비교하여 합쳐간다.3단계: 하나의 배열이 될 때까지 2단계 과정을 반복한다. function mergeSort(arr) { // 배열의 길이가 1 이하면 정렬이 필요없으므로 그대로 반환 if (arr..
while문을 사용한 삽입정렬의 일반형 function insertionSort(arr) { for (let i = 1; i = 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; } return arr;} for문을 사용하는 경우 아래와 같다.function insertionSort(arr) { for (let i = 1; i = 0 && arr[j] > key; j--) { arr[j + 1] = arr[j]; } arr[j + 1] = key; } return arr;} 오름차순 삽입정렬 로직을 가지고 있는, 배열을 파라미터로 받는 함수의 경우 아..
// 오름차순 정렬 (최솟값 찾기)function bubbleSortAscending(array) { const len = array.length; for(let i = 0; i array[j+1]) { // 오름차순을 위한 비교 [array[j], array[j+1]] = [array[j+1], array[j]]; swapped = true; } } if(!swapped) break; } return array;} // 내림차순 정렬 (최댓값 찾기)function bubbleSortDescending(array) { const len = array.length; for(let i = 0; i
버블 정렬이 맨 앞부터 하나씩 올라가며 위치를 찾아가는 방법이라면 선택 정렬은 맨 아래부터 값을 쌓아나가는 방법이라고 할 수 있다.배열을 한 바퀴 돌면서 가장 작은 값을 찾아내 0번 인덱스에 배치하고, 남은 정렬을 다시 순회하면서 그 중에서 가장 작은 값을 찾아내 그 다음 인덱스인 1번에 배치한다. 즉 계속해서 최솟값을 찾아내 스왑해 주는 것이다. 선택정렬의 3단계 1단계: 주어진 배열 중 최솟값 찾기2단계: 값을 맨 앞에 위치한 값과 교체3단계 맨 처음 위치를 뺀 나머지 배열을 위의 방법으로 반복하여 교체 //오름차순 정렬: 가장 작은 요소를 찾아 앞으로 이동function selectionSort(array) { const len = array.length; // 배열의 처음부터 끝에서 두..