1. 버블 소트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <iostream>
#include <algorithm>
using namespace std;
int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
int main()
{
int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
for(int i = 0 ; i < 10 ; i++)
{
for(int j = 0 ; j < size-1 ; j++)
{
if(arr[j] > arr[j+1])
swap(arr[j] , arr[j+1]);
}
}
for(int i = 0 ; i < 10 ; i++)
cout << arr[i] << ' ';
}
|
cs |
2. 삽입정렬
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
|
#include <iostream>
#include <algorithm>
using namespace std;
int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
int main()
{
int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
for (int i = 1; i < size; i++)
{
int key = arr[i];
int j;
for (j = i - 1; j >= 0; j--)
{
if (arr[j] > key)
arr[j + 1] = arr[j];
else
break;
}
arr[j + 1] = key;
}
}
|
cs |
3. 선택정렬
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
|
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
for (int i = 0; i < size; i++)
{
int min = i;
for (int j = i + 1; j < size; j++)
{
if (arr[j] < arr[min])
min = j;
}
if (i != min)
swap(arr[i], arr[min]);
}
for (int i = 0; i < 10; i++)
{
cout << arr[i] << " ";
}
}
|
cs |
4. 퀵정렬
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
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <iostream>
#include <algorithm>
using namespace std;
int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
void quick_sort(int left, int right)
{
if (left >= right)
return;
swap(arr[left], arr[(left + right) / 2]); // 역순일때의 최악을 피한다.
int i = left + 1;
int j = right;
int pivot = left;
while (1)
{
while (i <= right && arr[i] < arr[pivot]) // left는 피벗보다 크거나 같을 때 멈춤
i++;
while (j > left&& arr[j] > arr[pivot])
j--;
if (i <= j) // 이건 부등호 상관 없다.
swap(arr[i++], arr[j--]);
else
break;
}
swap(arr[pivot], arr[j]); // pivot 위치와 high를 스왑
quick_sort(left, j - 1);
quick_sort(j + 1, right);
}
int main()
{
quick_sort(0, 9);
for (int i = 0; i < 10; i++)
cout << arr[i] << " ";
}
|
cs |
5. 병합정렬
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include <iostream> #include <algorithm> using namespace std; int arr[10] = { 9,8,7,6,5,4,3,2,1,0 }; int temp[10]; void merge(int left, int mid, int right) { int i, j, k; i = left; j = mid + 1; k = left; // sorted while (i <= mid && j <= right) { if (arr[i] <= arr[j]) // 이걸 잘해야 stable이 안깨진다. temp[k++] = arr[i++]; else temp[k++] = arr[j++]; } if (i > mid) { for (int l = j; l <= right; l++) temp[k++] = arr[l]; } else { for (int l = i; l <= mid; l++) temp[k++] = arr[l]; } for (int l = left; l <= right; l++) arr[l] = temp[l]; } void merge_sort(int left, int right) { if(left >= right) return; int mid = (left + right) / 2; merge_sort(left, mid); merge_sort(mid + 1, right); merge(left, mid, right); } int main() { merge_sort(0, 9); for (int i = 0; i < 10; i++) cout << arr[i] << " "; } | cs |
'알고리즘 기술' 카테고리의 다른 글
lower_bound, upper_bound 코드 (0) | 2020.06.22 |
---|---|
피보나치 수 를 log2(N) 빠르기로 구하기. (0) | 2020.06.12 |
유클리드 호제법 (0) | 2020.06.11 |
링크드 리스트 (0) | 2020.06.11 |
nPr nCr 기본 (0) | 2020.06.09 |