μ ν μ λ ¬(selection sort)
: μ λ ¬μ΄ μλ μ«μλ€ μ€μμ μ΅μ κ°μ μ ννμ¬ λ°°μ΄μ 첫λ²μ§Έ μμμ κ΅ννλ€.
5, 3, 8, 1, 2, 7 μ΄λΌλ μ«μλ₯Ό μ λ ¬ν΄λ³Έλ€λ©΄?
-> κ²°κ³Όμ μΌλ‘ 1, 2, 3, 5, 7, 8 μΌλ‘ μ λ ¬μ΄ λμλ€.

λ΄λΆ for 루νλ‘μ, (i+1)λ²μ§Έ μμλΆν° λ°°μ΄μ λ§μ§λ§ μμ μ€μμ μ΅μκ°μ μ°Ύλλ€.
νμ¬μ μ΅μκ°κ³Ό λΉκ΅νμ¬ λ μμ μ μκ° λ°κ²¬λλ©΄ κ·Έ μ μκ° λ€μ΄μλ μΈλ±μ€λ₯Ό leastμ μ μ₯νλ€.
#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κ° κ°μΌλ©΄ νμμ μ±κ³΅λκ³ ν€κ°μ΄ λ°κ²¬λ λ°°μ΄μ μΈλ±μ€λ₯Ό μΆλ ₯νλ€.
#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)
: μ λ ¬λ λ°°μ΄μ μ€μμ μμΉν μμμ λΉκ΅ λνμ΄
: μλκ° λΉ λ₯΄λ€

#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;
}

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];
βint s[10]; //1μ°¨μ λ°°μ΄
βint s[3][10]; //2μ°¨μ λ°°μ΄
βint s[5][3][10]; //3μ°¨μ λ°°μ΄

2μ°¨μ λ°°μ΄μ μ΄κΈ°ν
- νμ΄ 3κ°, μ΄μ΄ 5κ°λΌλ κ²μ μ»΄ν¨ν°μ μλ €μ€
int s[3][5] = {
ββββ{0, 1, 2, 3, 4},
ββββ{10, 11, 12, 13, 14},
ββββ{20, 21, 22, 23, 24}
};
- μ΄μ΄ 5κ°λΌλ κ²μ μ»΄ν¨ν°μ μλ €μ€. νμ΄ λͺκ°λΌλ κ±Έ μλ €μ£Όμ§ μμΌλ©΄ μ»΄ν¨ν°κ° μμμ νμ κ°―μλ₯Ό μΊμΉν¨
int s[][5] = {
ββββ{0, 1, 2, 3, 4},
ββββ{10, 11, 12, 13, 14},
ββββ{20, 21, 22, 23, 24}
};
- μ΄μ΄ 5κ°λΌλ κ²μ μ»΄ν¨ν°μ μλ €μ€. λ§μ§λ§ μ«μ λ€μ ,λ₯Ό μΌμΌλ―λ‘ νμ 3κ°κ° μκΉ
int s[][5] = {
ββββ0, 1, 2, 3, 4,
ββββ5, 6, 7, 8, 9,
};

νλ ¬(matrix)
: μμ°κ³Όνμμ λ§μ λ¬Έμ λ₯Ό ν΄κ²°νλλ° μ¬μ©νλ€.
- 2μ°¨μ λ°°μ΄μ ν¨μλ‘ μ λ¬νκΈ°
#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;
}
'C Programming Language > C' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
CμΈμ΄ λ¬Έμμ λ¬Έμμ΄μ λν΄ νμ΅νκΈ° (0) | 2024.07.10 |
---|---|
CμΈμ΄ ν¬μΈν°(pointer)μ κ°λ νμ΅νκΈ° (0) | 2024.07.02 |
CμΈμ΄ λ°°μ΄μ λν΄ νμ΅νκΈ° (0) | 2024.06.19 |
CμΈμ΄ μ¬κ·μ μκ³ λ¦¬μ¦ : νλ Έμ΄ ν λ¬Έμ (0) | 2024.06.19 |
CμΈμ΄ static, register, volatile μ§μ μ κ°λ (2) | 2024.06.19 |