maxmin n°³ÀÇ µ¥ÀÌÅͷκÎÅÍ ÃÖ´ëÄ¡ ¹× ÃÖ¼ÒÄ¡¸¦ ¿ä±¸ÇÑ´Ù
void maxmin(int *max, int *min, DATA *data, int nmem);
typedef struct {
int key; /* ºñ±³ÀÇ Å°°¡ µÇ´Â Çʵå */
int info; /* ±× ¿ÜÀÇ Çʵå */
} DATA;
max (Ãâ·Â) ŰÀÇ °ªÀÌ ÃÖ´ëÀÇ ·¹ÄÚµå ¹è¿ÀÇ ¹øÈ£(¼±µÎ ¹øÈ£´Â 0)
min (Ãâ·Â) ŰÀÇ °ªÀÌ ÃÖ¼ÒÀÇ ·¹ÄÚµå ¹è¿ÀÇ ¹øÈ£(¼±µÎ ¹øÈ£´Â 0)
data (ÀÔ·Â) ·¹ÄÚµå ¹è¿
nmem (ÀÔ·Â) ·¹ÄÚµå ¹è¿ÀÇ Å©±â
¾øÀ½
void maxmin(int *max, int *min, DATA *data, int nmem)
{
static void rmaxmin();
if (nmem <= 0) *max = *min = 0;
else rmaxmin(max, min, data, 0, nmem - 1);
}
static void rmaxmin(int *max, int *min, DATA *data, int i, int j)
{
int k;
int max1, max2, min1, min2;
if (i+1 >= j) {
if (data[i]. key > data[j]. key) {
*max = i;
*min = j;
} else {
*max = j;
*min = i;
}
} else {
k = (i + j) / 2;
rmaxmin(&max1, &min1, data, i, k);
rmaxmin(&max2, &min2, data, k+1, j);
*max = (data[max1]. key > data[max2]. key) ? max1 : max2;
*min = (data[min1]. key < data[min2]. key) ? min1 : min2;
}
}
ÇÑÆí, ÇÁ·Î±×·¥°ú °°ÀÌ, n °³ÀÇ µ¥ÀÌÅ͸¦ ¹Ý¾¿À¸·Î ³ª´©¾î ±× °¢°¢ ÀÇ ±×·ì¿¡¼ ÃÖ´ë ÃÖ¼Ò¸¦ ã¾Æ³Â´Ù°í Çϸé(ÀÚ), ÀüüÀÇ ÃÖ´ëÄ¡´Â 2°³ÀÇ ÃÖ´ëÀÇ Å« Æí, ÀüüÀÇ ÃÖ¼ÒÄ¡´Â 2°³ÀÇ ÃÖ¼ÒÀÇ ÀÛÀº ÆíÀÌ´Ù. ÀÌ Á¶ÀÛÀ» Àç±ÍÀûÀ¸·Î °¢ ±×·ìÀÇ ¿ä¼Ò°¡ 2°³°¡ µÉ ¶§±îÁö ½Ç½ÃÇÑ´Ù. ÀÌ °æ¿ì, ºñ±³ ȸ¼ö´Â 3/2n - 2 À̸ç, »ó±âÀÇ ´Ü¼ø ºñ±³¹ýÀÇ ±×°Íº¸´Ù ÀÛ´Ù.
ÀÌ¿ëÇÏ·Á¸é , µ¥ÀÌÅÍ ±¸Á¶¸¦ ½ÇÁ¦ÀÇ ¹®Á¦¿¡ ¸ÂÃß¾î ¼öÁ¤ÇÒ Çʿ䰡 ÀÖ´Ù.