์ ํ ์ ๋ ฌ(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 |