42-3.Á¤·Ä ¾Ë°í¸®Áò

42-3-°¡.sort

Á¤·ÄÀº °Ë»ö°ú ÇÔ²² °¡Àå ÀÚÁÖ »ç¿ëµÇ´Â ¾Ë°í¸®ÁòÀÌ´Ù. STLÀº Á¤·ÄÀ» ÇÏ´Â ¾Ë°í¸®Áò°ú Á¤·ÄµÈ ÄÁÅ×À̳ʿ¡ ´ëÇØ µ¿ÀÛÇÏ´Â ¾Ë°í¸®Áò ´Ù¼ö °³¸¦ Á¦°øÇÑ´Ù. ´ÙÀ½Àº ÄÁÅ×À̳ʸ¦ Á¤·ÄÇÏ´Â 4°³ÀÇ ¾Ë°í¸®ÁòÀε¥ Á¤·Ä ¹üÀ§¿Í ¾ÈÁ¤¼º ¿©ºÎ°¡ °¢°¢ ´Ù¸£´Ù.

 

void sort (RanIt first, RanIt last [, BinPred F]);

void stable_sort (RanIt first, RanIt last [, BinPred F]);

void partial_sort (RanIt first, RanIt SortEnd, RanIt last [, BinPred F]);

void nth_element(RanIt first, RanIt Nth, RanIt last [, BinPred F]);

 

¸ðµç Á¤·Ä ÇÔ¼öµéÀº ¹Ù¸¥ Á¤·ÄÀ» À§ÇØ ÀÓÀÇ Á¢±Ù ¹Ýº¹ÀÚ¸¦ ¿ä±¸ÇϹǷΠÀÓÀÇ Á¢±ÙÀÌ °¡´ÉÇÑ ÄÁÅ×À̳ʿ¡ ´ëÇØ¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÁÖ·Î º¤ÅÍ¿¡ ´ëÇØ Á¤·ÄÀ» ¼öÇàÇϸç CÀÇ ´Ü¼ø ¹è¿­¿¡ ´ëÇØ¼­µµ Á¤·ÄÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù. ³× ÇÔ¼ö ¸ðµÎ Á¤·Ä ´ë»óÀ» ÁöÁ¤ÇÏ´Â first ~ last ¹Ýº¹ÀÚ ±¸°£À» Àμö·Î ÃëÇÏ¸ç ¸¶Áö¸· Àμö·Î Á¤·ÄÀÇ ±âÁØÀ¸·Î »ç¿ëµÉ ÀÌÇ× Á¶°ÇÀÚ¸¦ Àü´ÞÇÒ ¼ö ÀÖ´Ù. º°µµÀÇ Á¶°ÇÀÚ°¡ ÁöÁ¤µÇÁö ¾ÊÀ» °æ¿ì < ¿¬»êÀÚ·Î ¿ä¼ÒÀÇ ´ë¼Ò¸¦ ºñ±³ÇÑ´Ù.

sort ÇÔ¼ö°¡ °¡Àå ±âº»ÀûÀÎ Á¤·Ä ÇÔ¼öÀ̸ç first ~ last ±¸°£À» Á¶°ÇÀÚÀÇ ºñ±³ °á°ú´ë·Î Á¤·ÄÇÑ´Ù. ±¸Çö ¹æ½ÄÀº ÄÄÆÄÀÏ·¯¸¶´Ù ´Ù¸£°ÚÁö¸¸ ´ë°³ÀÇ °æ¿ì °¡Àå ºü¸£´Ù°í ¾Ë·ÁÁø Äü¼ÒÆ® ¾Ë°í¸®ÁòÀ̳ª ¾à°£ÀÇ º¯Çü ¾Ë°í¸®ÁòÀ¸·Î ±¸ÇöµÈ´Ù. stable_sort´Â °°Àº °ªÀÇ »ó´ëÀûÀÎ ¼ø¼­°¡ Á¤·Ä ÈÄ¿¡µµ À¯ÁöµÇ´Â ¾ÈÁ¤ÀûÀÎ Á¤·ÄÀ» ¼öÇàÇϴµ¥ Á¤·Ä ¼Óµµ´Â ¾ÈÁ¤¼ºÀÌ ¾ø´Â sortº¸´Ù Á¶±Ý ´õ ´À¸®´Ù.

partial_sort´Â µÎ ¹øÂ° Àμö·Î ÁöÁ¤ÇÑ SortEnd ºÎºÐ Á÷Àü±îÁö¸¸ Á¤·ÄÇÏ°í ³ª¸ÓÁö µÞºÎºÐÀº Á¤·ÄµÇÁö ¾ÊÀº ä·Î ³»¹ö·Á µÐ´Ù. ÃÖ»óÀ§ n ¹ø±îÁö¸¸ °ñ¶ó³»°í ½ÍÀ» ¶§ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ¸ç ¾ÈÁ¤¼ºÀº ¾ø´Ù. nth_element´Â µÎ ¹øÂ° Àμö·Î ÁöÁ¤ÇÑ n¿¡ n¹øÂ° °ªÀ» ³õ°í ±× ¿ÞÂÊ¿¡ nº¸´Ù ÀÛÀº °ªÀ», ¿À¸¥ÂÊ¿¡ n ÀÌ»óÀÇ °ªÀ¸·Î ±¸°£À» ºÐÇÒÇÑ´Ù. nÀÇ À§Ä¡¸¸ Á¤È®ÇÏ¸ç ³ª¸ÓÁö ÁÂ¿ì ±¸°£ÀÇ Á¤·Ä »óÅ´ º¸ÁõµÇÁö ¾Ê´Â´Ù. ƯÁ¤°ªÀ» ±âÁØÀ¸·Î ¹Ì¸¸ ±×·ì, ÀÌ»ó ±×·ìÀ» ºÐ·ùÇÒ ¶§ À¯¿ëÇÏ´Ù. ´ÙÀ½ ¿¹Á¦·Î 4°¡Áö ÇÔ¼ö¸¦ ¸ðµÎ Å×½ºÆ®ÇØ º¸ÀÚ.

 

¿¹ Á¦ : sort

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

 

template<typename C> void dump(const char *desc, C c) { cout.width(12);cout << left << desc << "==> ";

      copy(c.begin(),c.end(),ostream_iterator<typename C::value_type>(cout," ")); cout << endl; }

 

void main()

{

     int ari[]={49,26,19,77,34,52,84,34,92,69};

 

     vector<int> vi(&ari[0],&ari[10]);

     dump("¿øº»",vi);

 

     sort(vi.begin(),vi.end());

     dump("sort",vi); 

     vector<int> vi2(&ari[0],&ari[10]);

     stable_sort(vi2.begin(),vi2.end());

     dump("stable_sort",vi2);

    

     vector<int> vi3(&ari[0],&ari[10]);

     partial_sort(vi3.begin(),vi3.begin()+5,vi3.end());

     dump("partial_sort",vi3);

 

     vector<int> vi4(&ari[0],&ari[10]);

     nth_element(vi4.begin(),vi4.begin()+5,vi4.end());

     dump("nth_element",vi4);

}

 

10°³ÀÇ Á¤¼ö°¡ ÀúÀåµÇ¾î ÀÖ´Â º¤Å͸¦ °¢°¢ÀÇ ¹æ¹ýÀ¸·Î Á¤·ÄÇØ º¸¾Ò´Ù.

 

¿øº»        ==> 49 26 19 77 34 52 84 34 92 69

sort        ==> 19 26 34 34 49 52 69 77 84 92

stable_sort ==> 19 26 34 34 49 52 69 77 84 92

partial_sort==> 19 26 34 34 49 77 84 52 92 69

nth_element ==> 19 26 34 34 49 52 69 77 84 92

 

¿øº»¿¡´Â Á¤¼öµéÀÌ ¹«Áú¼­ÇÏ°Ô ¹èÄ¡µÇ¾î ÀÖÁö¸¸ sort·Î Á¤·ÄÇϸé Å©±â¼øÀ¸·Î ¿À¸§Â÷¼ø Á¤·ÄµÈ´Ù. º°µµÀÇ Á¶°ÇÀÚ¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¹Ì¸¸ ºñ±³ Á¶°ÇÀÚÀÎ less°¡ »ç¿ëµÇ´Âµ¥ sort(vi.begin(), vi.end(), greater<int>());·Î Ãʰú ºñ±³¸¦ ÇÏ°Ô µÇ¸é Å« °ªÀÌ ´õ ¾ÕÂÊ¿¡ ¿À¹Ç·Î ³»¸²Â÷¼øÀ¸·Î Á¤·ÄµÈ´Ù. stable_sortµµ sort¿Í °°Àº °á°ú¸¦ º¸À̴µ¥ ¾ÈÁ¤¼ºÀÌ ÀÖ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. ¿¹Á¦ÀÇ º¤ÅÍ¿¡´Â 34°¡ µÎ °³ Àִµ¥ ÀÌ µÎ 34°¡ ¿ø·¡ÀÇ À§Ä¡¸¦ À¯ÁöÇϴ°¡ ¾Æ´Ñ°¡°¡ ´Ù¸£´Ù. Á¤¼ö°°Àº ´Ü¼ø ŸÀÔÀº ¾îÂ÷ÇÇ °ªÀ¸·Î¸¸ ±¸ºÐµÇ¹Ç·Î ¿ø·¡ÀÇ ¼ø¼­°¡ º° Àǹ̰¡ ¾øÁö¸¸ °´Ã¼³¢¸® ºñ±³ÇÒ ¶§´Â ÀÌ·± ¾ÈÁ¤¼ºÀÌ Áß¿äÇÒ ¼öµµ ÀÖ´Ù.

¿¹¸¦ µé¾î »ç¿ø ¸ñ·Ï¿¡ ¶È°°Àº À̸§À» °¡Áö´Â ±èö¼ö ºÎÀå°ú ±èö¼ö ´ë¸®°¡ Àִµ¥ Á¤·ÄµÇÁö ¾Ê¾ÒÀ» ¶§´Â ±èö¼ö ºÎÀåÀÌ ´õ ¾ÕÂÊ¿¡ ÀÖ¾ú´Ù°í ÇÏÀÚ. ÀÌ »óÅ¿¡¼­ À̸§¼øÀ¸·Î Á¤·ÄÇßÀ» ¶§ ºÎÀåÀÌ ´ë¸®º¸´Ù ¾Õ¿¡ ÀÖ´ø ¿ø·¡ ¼ø¼­°¡ À¯ÁöµÇ´Â°¡ ¾Æ´Ñ°¡°¡ ¶§·Î´Â ±²ÀåÈ÷ Áß¿äÇÒ ¼öµµ ÀÖ´Ù. sort´Â ¾î·µç ÃÖ´ëÇÑ ºü¸£°Ô Á¤·Ä¸¸ ÇÏ´Â °ÍÀ̰í stable_sort´Â °°Àº °ªÀÇ ¼ø¼­°¡ È寮·¯ÁöÁö ¾Êµµ·Ï À¯ÁöÇϱâ±îÁö ÇϹǷΠsortº¸´Ù´Â Á¶±Ý ´õ ´À¸®´Ù.

partial_sort´Â ÁöÁ¤ÇÑ ¿ä¼Ò±îÁö¸¸ Á¤·ÄÇÏ°í ³ª¸ÓÁö µÚÂÊÀº Á¤·ÄÇÏÁö ¾Ê´Â´Ù. ¿¹Á¦¿¡¼­´Â 5¹øÂ° ¿ä¼Ò±îÁö¸¸ Á¤·ÄÇߴµ¥ °á±¹ »óÀ§ 0 ~ 4±îÁö ´Ù¼¸ °³ÀÇ ¿ä¼Ò¸¸ Á¤·ÄµÈ´Ù. »óÀ§ ´Ù¼¸ °³ÀÎ 49±îÁö Á¤È®ÇÏ°Ô Á¤·ÄµÇ¾ú°í µÞºÎºÐÀº À̺¸´Ù Å« °ªµé¸¸ ³²´Âµ¥ ³²Àº °ªµéÀÇ ¼ø¼­´Â ÀüÇô º¸ÀåµÇÁö ¾Ê´Â´Ù. ÀϺκп¡ ´ëÇØ¼­¸¸ Á¤·ÄÇϹǷΠ¼Óµµ´Â sortº¸´Ù ÈξÀ ´õ ºü¸£´Ù.

ºÎºÐ Á¤·ÄÀº ±×¾ß¸»·Î ÀϺθ¸ Á¤·ÄÇÑ °ªÀÌ ÇÊ¿äÇÒ ¶§ »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î Àü±¹ °íµîÇлý 30¸¸¸íÀÌ µ¿½Ã ¸ðÀÇ °í»ç¸¦ º¸¾Ò´Âµ¥ ÀÌ Áß »óÀ§ 10µî±îÁö¸¸ ¾îÇÐ ¿¬¼ö¸¦ º¸³» ÁÖ·Á°í ÇÑ´Ù. Àüü¸¦ ´Ù Á¤·ÄÇÑ ÈÄ ¾ÕÂÊ 10°³¸¦ °ñ¶óµµ µÇ°ÚÁö¸¸ ¾îÂ÷ÇÇ ÀÌ »óȲ¿¡¼­ °ü½ÉÀÖ´Â ´ë»óÀº Á¦ÀÏ Á¡¼ö°¡ ³ôÀº 10¸í»ÓÀ̹ǷΠ10¸í¿¡ ´ëÇØ¼­¸¸ ºÎºÐ Á¤·ÄÇÏ´Â °ÍÀÌ ÈξÀ ´õ À̵æÀÌ´Ù.

nth_element´Â ÁöÁ¤ÇÑ ¿ä¼Ò À§Ä¡¿¡¸¸ Á¤È®ÇÑ °ªÀ» ¹èÄ¡ÇÏ°í ³ª¸ÓÁö´Â ÀÌ ¿ä¼Ò¸¦ ±âÁØÀ¸·Î Á¿ì·Î ±¸°£À» ºÐÇÒÇÑ´Ù. ¿¹Á¦¿¡¼­´Â 5¹øÂ° ¿ä¼Ò¸¦ ±âÁØÀ¸·Î ÁöÁ¤ÇßÀ¸¹Ç·Î 5¹øÂ°Ä­¿¡ 52¸¦ ³Ö°í ¿ÞÂÊ¿¡´Â 52º¸´Ù ÀÛÀº °ªÀ», ¿À¸¥ÂÊ¿¡´Â 52º¸´Ù Å« °ªÀ» ¹èÄ¡ÇÑ´Ù. ÀÌ ¿¹¿¡¼­´Â ÁÂ¿ì ±¸°£ÀÌ ¿ì¿¬È÷ Á¤·ÄµÇ¾úÁö¸¸ ÀÚ·áÀÇ ¼ö°¡ ¸¹¾ÆÁö¸é ÀÌ´Â º¸ÁõµÇÁö ¾Ê´Â´Ù.

ƯÁ¤ À§Ä¡¸¦ ±âÁØÀ¸·Î ±×·ìÀ» ºÐ·ùÇÏ°í ½ÍÀ» ¶§ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϴµ¥ ¿¹¸¦ µé¾î 30¸¸¸íÀÇ Çлý Áß »óÀ§ 30%´Â Â÷ÈÄ ´õ ³­À̵µ°¡ ³ôÀº ½ÃÇèÀ» º¸µµ·Ï Çϰí ÇÏÀ§ 70%´Â ¿ø·¡ ³­À̵µ¿Í °°Àº ½ÃÇèÀ» º¸µµ·Ï ÇÒ ¶§ ÀÌ ÇÔ¼ö°¡ À¯¿ëÇÏ´Ù. ƯÁ¤ ÇлýÀÌ ¸î µîÀΰ¡´Â Áß¿äÇÏÁö ¾Ê°í 30%¿¡ µé¾ú´ÂÁö ±×·¸Áö ¸øÇÑÁö¸¸ °ü½É»çÀ̹ǷΠ30% À§Ä¡¸¦ ±âÁØÀ¸·Î Á¿ì·Î ±¸°£¸¸ ³ª´©¸é µÈ´Ù.