C Programming Language/C

Cμ–Έμ–΄ μ •λ ¬κ³Ό 행렬에 λŒ€ν•΄ ν•™μŠ΅ν•˜κΈ°

567Rabbit 2024. 7. 1. 21:45

 

선택 μ •λ ¬(selection sort)

 

: 정렬이 μ•ˆλœ μˆ«μžλ“€ μ€‘μ—μ„œ μ΅œμ†Œ 값을 μ„ νƒν•˜μ—¬ λ°°μ—΄μ˜ 첫번째 μš”μ†Œμ™€ κ΅ν™˜ν•œλ‹€.

 

5, 3, 8, 1, 2, 7 μ΄λΌλŠ” 숫자λ₯Ό μ •λ ¬ν•΄λ³Έλ‹€λ©΄?

-> 결과적으둜 1, 2, 3, 5, 7, 8 으둜 정렬이 λ˜μ—ˆλ‹€.

 

 

 

λ‚΄λΆ€ for λ£¨ν”„λ‘œμ„œ, (i+1)번째 μ›μ†ŒλΆ€ν„° λ°°μ—΄μ˜ λ§ˆμ§€λ§‰ μ›μ†Œ μ€‘μ—μ„œ μ΅œμ†Œκ°’μ„ μ°ΎλŠ”λ‹€.

ν˜„μž¬μ˜ μ΅œμ†Œκ°’κ³Ό λΉ„κ΅ν•˜μ—¬ 더 μž‘μ€ μ •μˆ˜κ°€ 발견되면 κ·Έ μ •μˆ˜κ°€ λ“€μ–΄μžˆλŠ” 인덱슀λ₯Ό least에 μ €μž₯ν•œλ‹€.

c, h
λ‹«κΈ°
#include <stdio.h> #define SIZE 10 int main(void) { ​​​​int list[SIZE] = { 3, 2, 9, 7, 1 ; 4, 8, 0, 6, 5}; ​​​​int i, j, temp, least; ​​​​ ​​​​for(i = 0 ; i < SIZE-1 ; i++) ​​​​{ β€Œβ€‹β€‹β€‹β€‹least = i; ​​​​​​​​for(j = i + 1 ; j < SIZE ; j++) ​​​​​​​​​​​​if(list[j] < list[least]) ​​​​​​​​​​​​​​​​least = j; ​​​​​​​​temp = list[i]; ​​​​​​​​list[i] = list[least] ​​​​​​​​list[least] = temp; ​​​​} }

 

 

 

- λ³€μˆ˜μ˜ 값을 μ„œλ‘œ κ΅ν™˜ν•  λ•Œ μ£Όμ˜ν•  점

 

// λ‹€μŒκ³Ό 같이 ν•˜λ©΄ μ•ˆλ¨

score[i] = score[least];  // score[i]의 κΈ°μ‘΄ 값은 νŒŒκ΄΄λœλ‹€!

score[least] = score[i];

 

// μ˜¬λ°”λ₯Έ 방법

temp = list[i];

list[i] = list[least];

list[least] = temp;

 

 

 

 

 

 

순차 탐색 (search algorigm)

 

: 순차 탐색은 λ°°μ—΄μ˜ μ›μ†Œλ₯Ό μˆœμ„œλŒ€λ‘œ ν•˜λ‚˜μ”© κΊΌλ‚΄μ„œ 탐색킀와 λΉ„κ΅ν•˜μ—¬ μ›ν•˜λŠ” 값을 μ°Ύμ•„κ°€λŠ” 방법이닀.

 

 

for 루프λ₯Ό μ΄μš©ν•˜μ—¬ list[i]와 keyλ₯Ό λΉ„κ΅ν•˜λŠ” 연산을 λ°°μ—΄μ˜ 크기만큼 λ°˜λ³΅ν•œλ‹€.

λ§Œμ•½ list[i]와 keyκ°€ κ°™μœΌλ©΄ 탐색은 μ„±κ³΅λ˜κ³  킀값이 발견된 λ°°μ—΄μ˜ 인덱슀λ₯Ό 좜λ ₯ν•œλ‹€.

 

c, h
λ‹«κΈ°
#include <stdio.h> #define SIZE 10 int main(void) { ​​​​int key, i; ​​​​int list[SIZE] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; ​​​​ ​​​​printf("탐색할 값을 μž…λ ₯ν•˜μ‹œμ˜€: "); ​​​​scanf("%d", &key); ​​​​ ​​​​for(i = 0 ; i < SIZE ; i++) β€Œβ€‹β€‹β€‹β€‹if(list[i] == key) ​​​​​​​​ ​​​​printf("탐색 성곡 인덱슀= %d\n", i); ​​​​printf("탐색 μ’…λ£Œ\n"); ​​​​ ​​​​return 0; }

 

- λ§Œμ•½ 7을 μž…λ ₯ν•˜λ©΄ 탐색 성곡 μΈλ±μŠ€λŠ” 6이 λœλ‹€.

 

 

 

 

 

 

 

이진 탐색(binary search)

 

: μ •λ ¬λœ λ°°μ—΄μ˜ 쀑앙에 μœ„μΉ˜ν•œ μ›μ†Œμ™€ 비ꡐ λ˜ν’€μ΄

: 속도가 λΉ λ₯΄λ‹€

 

 

c, h
λ‹«κΈ°
#include <stdio.h> #define SIZE 16 int binary_search(int list[], int n, int key) int main(void) { ​​​​int key; ​​​​int grade[SIZE] = { 2, 6, 11, 13, 18, 20, 22, 27, 29, 30, 34, 38, 41, 42, 45, 47 }; ​​​​ ​​​​printf("탐색할 값을 μž…λ ₯ν•˜μ‹œμ˜€: "); ​​​​scanf("%d", &key); ​​​​ ​​​​printf("탐색 κ²°κ³Ό= %d\n", binary_search(grade, SIZE, key)); ​​​​ ​​​​return 0; }

 

 

c, h
λ‹«κΈ°
int binary_search(int list[], int n, int key) { ​​​​int low, high, middle; ​​​​low = 0; ​​​​high = n-1; ​​​​while( low <= high ) { //아직 μˆ«μžλ“€μ΄ λ‚¨μ•„μžˆμœΌλ©΄ ​​​​ β€Œβ€‹β€‹β€‹β€‹printf("[%d %d]\n", low, high) // ν•˜ν•œκ³Ό μƒν•œμ„ 좜λ ₯ν•œλ‹€ ​​​​​​​​middle = (low + high)/2; // 쀑간 μœ„μΉ˜λ₯Ό κ³„μ‚°ν•΄μ„œ ​​​​​​​​if( key == list[middle] ) β€Œβ€‹β€‹β€‹β€‹β€‹β€‹β€‹β€‹return middle; // μΌμΉ˜ν•˜λ©΄ 탐색 성곡 ​​​​​​​​else if( key > list[middle] ) // 쀑간 μ›μ†Œλ³΄λ‹€ 크닀면 β€Œβ€‹β€‹β€‹β€‹β€‹β€‹β€‹β€‹low = middle + 1 // μƒˆλ‘œμš΄ κ°’μœΌλ‘œ low μ„€μ • ​​​​​​​​else β€Œβ€‹β€‹β€‹β€‹β€‹β€‹β€‹β€‹high = middle - 1 // μƒˆλ‘œμš΄ κ°’μœΌλ‘œ high μ„€μ • ​​​​} ​​​​return - 1 ; }

 

 

 

 

 

 

 

2차원 λ°°μ—΄

 

int s[ROWS][COLS];

c, h
λ‹«κΈ°
​int s[10]; //1차원 λ°°μ—΄ ​int s[3][10]; //2차원 λ°°μ—΄ ​int s[5][3][10]; //3차원 λ°°μ—΄

 

 

 

 

 

 

2차원 λ°°μ—΄μ˜ μ΄ˆκΈ°ν™”

 

- 행이 3개, 열이 5κ°œλΌλŠ” 것을 컴퓨터에 μ•Œλ €μ€Œ

c, h
λ‹«κΈ°
int s[3][5] = { ​​​​{0, 1, 2, 3, 4}, ​​​​{10, 11, 12, 13, 14}, ​​​​{20, 21, 22, 23, 24} };

 

- 열이 5κ°œλΌλŠ” 것을 컴퓨터에 μ•Œλ €μ€Œ. 행이 λͺ‡κ°œλΌλŠ” κ±Έ μ•Œλ €μ£Όμ§€ μ•ŠμœΌλ©΄ 컴퓨터가 μ•Œμ•„μ„œ ν–‰μ˜ 갯수λ₯Ό μΊμΉ˜ν•¨

c, h
λ‹«κΈ°
int s[][5] = { ​​​​{0, 1, 2, 3, 4}, ​​​​{10, 11, 12, 13, 14}, ​​​​{20, 21, 22, 23, 24} };

 

- 열이 5κ°œλΌλŠ” 것을 컴퓨터에 μ•Œλ €μ€Œ. λ§ˆμ§€λ§‰ 숫자 뒀에 ,λ₯Ό μΌμœΌλ―€λ‘œ 행은 3κ°œκ°€ 생김

c, h
λ‹«κΈ°
int s[][5] = { ​​​​0, 1, 2, 3, 4, ​​​​5, 6, 7, 8, 9, };

 

 

 

 

 

 

ν–‰λ ¬(matrix)

 

: μžμ—°κ³Όν•™μ—μ„œ λ§Žμ€ 문제λ₯Ό ν•΄κ²°ν•˜λŠ”λ° μ‚¬μš©ν•œλ‹€.

 

- 2차원 배열을 ν•¨μˆ˜λ‘œ μ „λ‹¬ν•˜κΈ°

c, h
λ‹«κΈ°
#include <stdio.h> #define YEARS 3; #define PRODUCTS 5; int sum(int grade[][PRODUCTS]); int main(void) { ​​​​int sales[YEARS][PRODUCTS] = {{1,2,3},{4,5,6},{7,8,9}}; ​​​​int total_sale; ​​​​ ​​​​total_sale = sum(sales); ​​​​printf("총 λ§€μΆœμ€ %dμž…λ‹ˆλ‹€.\n", total_sale); ​​​​ ​​​​return 0; } int sum(int grade[][PRODUCTS]) { ​​​​int y,p; ​​​​int total = 0; ​​​​ ​​​​for(y = 0 ; y < YEARS ; y++) β€Œβ€‹β€‹β€‹β€‹for(p = 0 ; p < PRODUCTS ; p++) β€Œβ€‹β€‹β€‹β€‹β€‹β€‹β€‹β€‹total += grade[y][p]; ​​​​ ​​​​return total; }