Skip to content

Commit ec04f07

Browse files
committed
array algorithm md file
1 parent c8b3d17 commit ec04f07

File tree

1 file changed

+190
-0
lines changed

1 file changed

+190
-0
lines changed
Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
# 배열 알고리즘 & 시간복잡도 정리
2+
3+
## 1. 배열 관련 내장 함수
4+
5+
### 1.1 map
6+
- 설명: 각 요소에 함수를 적용하여 새 배열을 만듭니다.
7+
- 시간복잡도: O(n)
8+
- 예시 코드:
9+
```javascript
10+
const arr = [1, 2, 3];
11+
const doubled = arr.map(x => x * 2);
12+
console.log(doubled); // [2, 4, 6]
13+
```
14+
15+
### 1.2 filter
16+
- 설명: 조건을 충족하는 요소만으로 새 배열을 만듭니다.
17+
- 시간복잡도: O(n)
18+
- 예시 코드:
19+
```javascript
20+
const arr = [1, 2, 3, 4];
21+
const evens = arr.filter(x => x % 2 === 0);
22+
console.log(evens); // [2, 4]
23+
```
24+
25+
### 1.3 reduce
26+
- 설명: 배열을 하나의 값으로 축소합니다.
27+
- 시간복잡도: O(n)
28+
- 예시 코드:
29+
```javascript
30+
const arr = [1, 2, 3, 4];
31+
const sum = arr.reduce((acc, cur) => acc + cur, 0);
32+
console.log(sum); // 10
33+
```
34+
35+
### 1.4 forEach
36+
- 설명: 배열의 각 요소에 대해 제공된 함수를 실행합니다.
37+
- 시간복잡도: O(n)
38+
- 예시 코드:
39+
```javascript
40+
const arr = [1, 2, 3];
41+
arr.forEach(x => console.log(x));
42+
```
43+
44+
### 1.5 push
45+
- 설명: 배열의 끝에 하나 이상의 요소를 추가합니다.
46+
- 시간복잡도: O(1)
47+
- 예시 코드:
48+
```javascript
49+
const arr = [1, 2, 3];
50+
arr.push(4);
51+
console.log(arr); // [1, 2, 3, 4]
52+
```
53+
54+
### 1.6 pop
55+
- 설명: 배열의 마지막 요소를 제거합니다.
56+
- 시간복잡도: O(1)
57+
- 예시 코드:
58+
```javascript
59+
const arr = [1, 2, 3, 4];
60+
arr.pop();
61+
console.log(arr); // [1, 2, 3]
62+
```
63+
64+
### 1.7 unshift
65+
- 설명: 배열의 시작 부분에 하나 이상의 요소를 추가합니다.
66+
- 시간복잡도: O(n)
67+
- 예시 코드:
68+
```javascript
69+
const arr = [1, 2, 3];
70+
arr.unshift(0);
71+
console.log(arr); // [0, 1, 2, 3]
72+
```
73+
74+
### 1.8 shift
75+
- 설명: 배열의 첫 번째 요소를 제거합니다.
76+
- 시간복잡도: O(n)
77+
- 예시 코드:
78+
```javascript
79+
const arr = [1, 2, 3];
80+
arr.shift();
81+
console.log(arr); // [2, 3]
82+
```
83+
84+
## 2. 검색 알고리즘
85+
86+
### 2.1 선형 검색
87+
- 설명: 배열의 각 요소를 순차적으로 확인하여 목표값을 찾습니다.
88+
- 시간복잡도: O(n)
89+
- 예시 코드:
90+
```javascript
91+
const arr = [1, 2, 3, 4, 5];
92+
console.log(arr.indexOf(3)); // 2
93+
console.log(arr.find(x => x > 3)); // 4
94+
```
95+
96+
### 2.2 이진 검색
97+
- 설명: 정렬된 배열에서 중간값을 기준으로 탐색 범위를 좁혀가며 목표값을 찾습니다.
98+
- 시간복잡도: O(log n)
99+
- 예시 코드:
100+
```javascript
101+
function binarySearch(arr, target) {
102+
let left = 0;
103+
let right = arr.length - 1;
104+
while (left <= right) {
105+
const mid = Math.floor((left + right) / 2);
106+
if (arr[mid] === target) return mid;
107+
if (arr[mid] < target) left = mid + 1;
108+
else right = mid - 1;
109+
}
110+
return -1;
111+
}
112+
113+
const arr = [1, 2, 3, 4, 5];
114+
console.log(binarySearch(arr, 3)); // 2
115+
```
116+
117+
## 3. 정렬 알고리즘
118+
119+
### 3.1 기본 정렬
120+
- 설명: 배열의 요소를 사전순 또는 사용자 정의 순서에 따라 정렬합니다.
121+
- 시간복잡도: 평균 O(n log n)
122+
- 예시 코드:
123+
```javascript
124+
const arr = [4, 2, 5, 1, 3];
125+
arr.sort((a, b) => a - b); // [1, 2, 3, 4, 5]
126+
```
127+
128+
### 3.2 버블 정렬
129+
- 설명: 인접한 두 요소를 비교하여 정렬합니다.
130+
- 시간복잡도: O(n^2)
131+
- 예시 코드:
132+
```javascript
133+
function bubbleSort(arr) {
134+
for (let i = 0; i < arr.length; i++) {
135+
for (let j = 0; j < arr.length - i - 1; j++) {
136+
if (arr[j] > arr[j + 1]) {
137+
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
138+
}
139+
}
140+
}
141+
return arr;
142+
}
143+
144+
const arr = [4, 2, 5, 1, 3];
145+
console.log(bubbleSort(arr)); // [1, 2, 3, 4, 5]
146+
```
147+
148+
### 3.3 퀵 정렬
149+
- 설명: 기준 값을 정하고 이를 기준으로 배열을 분할하여 정렬합니다.
150+
- 시간복잡도: 평균 O(n log n)
151+
- 예시 코드:
152+
```javascript
153+
function quickSort(arr) {
154+
if (arr.length <= 1) return arr;
155+
const pivot = arr[0];
156+
const left = arr.slice(1).filter(x => x < pivot);
157+
const right = arr.slice(1).filter(x => x >= pivot);
158+
return [...quickSort(left), pivot, ...quickSort(right)];
159+
}
160+
161+
const arr = [4, 2, 5, 1, 3];
162+
console.log(quickSort(arr)); // [1, 2, 3, 4, 5]
163+
```
164+
165+
### 3.4 병합 정렬
166+
- 설명: 배열을 반으로 나누어 정렬한 뒤 병합합니다.
167+
- 시간복잡도: O(n log n)
168+
- 예시 코드:
169+
```javascript
170+
function mergeSort(arr) {
171+
if (arr.length <= 1) return arr;
172+
const mid = Math.floor(arr.length / 2);
173+
const left = mergeSort(arr.slice(0, mid));
174+
const right = mergeSort(arr.slice(mid));
175+
176+
function merge(left, right) {
177+
const result = [];
178+
while (left.length && right.length) {
179+
if (left[0] < right[0]) result.push(left.shift());
180+
else result.push(right.shift());
181+
}
182+
return [...result, ...left, ...right];
183+
}
184+
185+
return merge(left, right);
186+
}
187+
188+
const arr = [4, 2, 5, 1, 3];
189+
console.log(mergeSort(arr)); // [1, 2, 3, 4, 5]
190+
```

0 commit comments

Comments
 (0)