Search
Duplicate
🧋

7회차

날짜
2022/05/23
수행 내용
버블 정렬, 2차원 배열

복습 : 버블정렬

버블 정렬 알고리즘

int arr[5] = { 5,2,1,3,4 }; // 정렬 전 배열 for (int i = 0; i < 5; i++) { printf("%d ", arr[i]); } printf("\n"); for (int i = 0; i < 5; i++) { for (int j = 0; j < 4; j++) { if (arr[j] > arr[j + 1]) { int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } // 정렬 후 배열 for (int i = 0; i < 5; i++) { printf("%d ", arr[i]); }
C
복사
i
j
arr
0
0
5 2 1 3 4 → 2 5 1 3 4
1
2 5 1 3 4 → 2 1 5 3 4
2
2 1 5 3 4 → 2 1 3 5 4
3
2 1 3 5 4 → 2 1 3 4 5
i
j
arr
1
0
2 1 3 4 5 → 1 2 3 4 5
1
1 2 3 4 5 → 1 2 3 4 5
2
(이하 동일)
3
(이하 동일)

버블 정렬의 기본 형태

두번째 for문에서 N 이 아닌 N - 1 만큼 반복하는 이유
현재 인덱스의 수다음 인덱스의 수를 비교하기 때문이다.
⇒ 만약, N 만큼 탐색한다면?
arr의 크기가 5일때, arr[4]arr[5]를 비교하게 됨 ⇒ 인덱스 접근 에러! (arr[5]는 존재하지 않는다.)
arr[5]는 arr[0] ~ arr[4] 이렇게 존재한다. (배열의 인덱스는 0부터 시작)
// 배열의 크기가 N인 경우 for (int i = 0; i < N; i++) { // 배열의 크기(N)만큼 탐색한다. for (int j = 0; j < N - 1; j++) { if (arr[j] > arr[j + 1]) { // 현재 인덱스의 수가 다음 인덱스의 수보다 크다면, // 현재 인덱스의 수와 다음 인덱스의 수를 바꿔준다. // 변수 swap 개념 int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } }
C
복사

이론 : 2차원 배열

1차원 배열

int arr[5] = { 1, 2, 3, 4, 5 };
C
복사

2차원 배열

// 3행 5열의 2차원 배열을 선언하고 초기화한다. int arr[3][5] = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }, { 11, 12, 13, 14, 15 } };
C
복사
1열
2열
3열
4열
5열
1행
1
2
3
4
5
2행
6
7
8
9
10
3행
11
12
13
14
15
1열
2열
3열
4열
5열
1행
arr[0][0]
arr[0][1]
arr[0][2]
arr[0][3]
arr[0][4]
2행
arr[1][0]
arr[1][1]
arr[1][2]
arr[1][3]
arr[4][4]
3행
arr[2][0]
arr[2][1]
arr[2][2]
arr[2][3]
arr[2][4]
2차원 배열의 초기화 방법
int arr[3][5]; for (int i = 0; i < 3; i++) { // 0 ~ 2 (3행) for (int j = 0; j < 5; j++) { // 0 ~ 4 (5행) arr[i][j] = j; printf("%d ", arr[i][j]); } printf("\n"); } /* < 출력 > 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 */
C
복사

문제 : 배열

2021년 1학기 기말고사 F 평균값, 그리고 평균 이하 값과 초과 값은 몇 개씩? (1차원 배열 복습)
백준 2167 2차원 배열의 합 (2차원 배열 요소 접근)