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 À̸ç, »ó±âÀÇ ´Ü¼ø ºñ±³¹ýÀÇ ±×°Íº¸´Ù ÀÛ´Ù.
ÀÌ¿ëÇÏ·Á¸é , µ¥ÀÌÅÍ ±¸Á¶¸¦ ½ÇÁ¦ÀÇ ¹®Á¦¿¡ ¸ÂÃß¾î ¼öÁ¤ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.