[문제1]
#기억해야할 개념 :
순방향으로 배열의 최댓값을 검색하는 j의 범위에서,
- 첫번째 요소를 max_i라 하고, j는 인덱스 1을 시작범위로 지정
- 끝범위는 i-1가 아닌 i를 포함해야한다.
이에 대한 노트정리 :
##코드 :
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
|
#include <stdio.h>
#include <stdlib.h>
#pragma warning (disable : 4996)
void InPlaceSort(int* A, int size)
{
for (int i = size - 1; i >= 0; i--)
{
int max_i = 0;//최댓값을 첫번째 원소로 지정
for (int j = 1; j <= i; j++)//★j범위에 i포함해야함
{
if (A[max_i] < A[j]) max_i = j;//최댓값 원소 업데이트
}
//0~i-1번째중 최댓값을 i와 SWAP
int tmp = A[max_i];
A[max_i] = A[i];
A[i] = tmp;
}
}
void PrintArr(int* A, int size) {
for (int i = 0; i < size; i++) printf(" %d", A[i]);
printf("\n");
}
int main()
{
int N;
int* A = NULL;
scanf("%d", &N);
A = (int*)malloc(sizeof(int) * N);
for (int i = 0; i < N; i++)scanf("%d", &A[i]);
InPlaceSort(A, N);
PrintArr(A, N);
free(A);
return 0;
}
|
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#include <stdio.h>
#include <stdlib.h>
#pragma warning (disable : 4996)
void InsertSort(int* A, int size) {
for (int i = 1; i < size; i++) //i의 범위 : 0(x), 1~끝범위
{
int j = i-1;//j의 범위 :처음부터 ~ i뺀 나머지
int key = A[i];//i를 key로 정함
while (j>=0&&key<A[j]) //A[j]와 key와 비교
{//오름차순 기준 : key가 더 쎄면, A[j]를 한칸 전진
A[j + 1] = A[j];
j--;//j이전칸 이동
}
//★j+1자리에 key삽입
A[j + 1] = key;
}
}
void PrintArr(int* A, int size) {
for (int i = 0; i < size; i++) printf(" %d", A[i]);
printf("\n");
}
int main()
{
int N;
int* A = NULL;
scanf("%d", &N);
A = (int*)malloc(sizeof(int) * N);
for (int i = 0; i < N; i++)scanf("%d", &A[i]);
InsertSort(A, N);
PrintArr(A, N);
free(A);
return 0;
}
|
cs |
'알고리즘(C언어) > 알고리즘 및 실습 강의' 카테고리의 다른 글
(5)실습5주차_합병정렬과 퀵정렬 (0) | 2024.09.05 |
---|---|
(4)실습4주차_힙과 힙정렬(2)_1_문제1번,문제2번 (0) | 2024.09.05 |
(4)실습3주차_힙과 힙정렬(1)_2_문제2번 (0) | 2024.09.02 |
(3)실습3주차_힙과 힙정렬(1)_1_문제1번 (0) | 2024.09.01 |
(2)실습2주차_우선순위 큐(선택 & 삽입 정렬)_2_문제3의 코드와 노트 (0) | 2024.09.01 |