(2)¶ÑÅÅÐò
Èç¹û½¨Á¢µÄ¶ÑÂú×ã×î´ó¶ÑµÄÌõ¼þ£¬Ôò¶ÑµÄµÚÒ»¸öÊý¾ÝÔªËØarr[0]¾ßÓÐ×î´óµÄ¹Ø¼ü×Ö£¬½«arr[0]Óëarr[n-1]¶Ôµ÷£¬°Ñ¾ßÓÐ×î´ó¹Ø¼ü×ÖµÄÊý¾ÝÔªËØ½»»»µ½×îºó£¬ÔÙ¶ÔÇ°ÃæµÄn-1¸öÊý¾ÝÔªËØÊ¹Óöѵĵ÷ÕûËã·¨£¬ÖØÐ½¨Á¢×î´ó¶Ñ£¬½á¹û°Ñ¾ßÓдÎ×î´ó¹Ø¼ü×ÖµÄÊý¾ÝÔªËØÓÖÉϸ¡µ½¶Ñ¶¥£¬¼´arr[0]µÄλÖã¬ÔÙ¶Ôµ÷arr[0]ºÍarr[n-2]£¬¡£¬Èç´Ë·´¸´Ö´ÐÐn-1´Î£¬×îºóµÃµ½È«²¿ÅÅÐòºÃµÄÊý¾ÝÔªËØÐòÁС£
α´úÂëÈçÏ£º
template
int tablesize=currentsize;
for(int i=(currentsize-2)/2;i>=0;i--) filterdown(i); //³õʼ½¨¶Ñ for(int i=currentsize-1;i>=1;i--) {
swap(arr[0],arr[i]);//¶Ñ¶¥ÔªËغÍ×îºóÒ»¸öÔªËØ½»»» currentsize--;
filterdown(0);//ÖØ½¨×î´ó¶Ñ
cout<<\µÚ\<<++num<<\ÌËÅÅÐò½á¹ûΪ:\; for(int t=0;t num=0; currentsize=tablesize; } <8>¹é²¢ÅÅÐò£¨°üÀ¨¹é²¢Ëã·¨£¬Ò»Ì˹鲢Ëã·¨ºÍ¹é²¢ÅÅÐò£© ¹é²¢Ëã·¨ Æä»ù±¾Ë¼ÏëÊÇ£ºÉèÓÐÁ½¸öÓÐÐò±íAºÍB£¬ÆäÊý¾ÝÔªËØ¸öÊý£¨±í³¤£©·Ö±ðΪnºÍm£¬±äÁ¿iºÍj·Ö±ðÊDZíAºÍ±íBµÄµ±Ç°¼ì²âÖ¸Õ룻Éè±íCÊǹ鲢ºóµÄÐÂÓÐÐò±í£¬±äÁ¿kÊÇËüµÄµ±Ç°´æ·ÅÖ¸Õë¡£¿ªÊ¼Ê±i¡¢j¡¢k¶¼·Ö±ðÖ¸ÏòA¡¢B¡¢CÈý¸ö±íµÄÆðʼλÖã»È»ºó¸ù¾ÝA[i]ÓëB[j]µÄ¹Ø¼ü×ֵĴóС£¬°Ñ¹Ø¼ü×ÖСµÄÊý¾ÝÔªËØ·Åµ½Ð±íC[k]ÖУ»ÇÒÏàÓ¦µÄ¼ì²âÖ¸Õ루i»òj£©ºÍ´æ·ÅÖ¸ÕëkÔö¼Ó1.Èç´ËÑ»·£¬µ±iÓëjÖÐÓÐÒ»¸öÒѾ³¬³ö±í³¤Ê±£¬½«ÁíÒ»¸ö±íÖеÄÊ£Óಿ·ÖÕÕ³µ½Ð±íC[k]~C[m+n]ÖС£ ÏÂÃæµÄ¹é²¢Ëã·¨ÖУ¬Á½¸ö´ý¹é²¢µÄÓÐÐò±íÊ×βÏà½Ó´æ·ÅÔÚÊý×ésourcetable.arr[]ÖУ¬ÆäÖеÚÒ»¸ö±íµÄϱ귶Χ´Óleftµ½mid£¬ÁíÒ»¸ö±íµÄϱ귶Χ´Ómid+1µ½right¡£Ç°Ò»¸ö±íÖÐÓÐmid-left+1¸öÊý¾ÝÔªËØ£¬ºóÒ»¸ö±íÖÐÓÐright ¨Cmid¸öÊý¾ÝÔªËØ¡£¹é²¢ºóµÃµ½µÄÐÂÓÐÐò±íÓÐright ¨Cmid¸öÊý¾ÝÔªËØ¡£¹é²¢ºóµÃµ½µÄÐÂÓÐÐò±í´æ·ÅÔÚÁíÒ»¸ö¸¨ÖúÊý×émergedtable.arr[]ÖУ¬Æäϱ귶Χ´Óleftµ½right¡£ α´úÂëÈçÏ£º template sortlist int i=left,j=mid+1,k=left;//Ö¸Õë³õʼ»¯ //iÊÇǰһ¶ÎµÄµ±Ç°ÔªËØÎ»Öã¬jÊǺóÒ»¶ÎµÄµ±Ç°ÔªËØÎ»Öã¬kÊǸ¨ÖúÊý×éµÄµ±Ç°Î»Öà while(i<=mid&&j<=right) if(sourcetable.arr[i]<=sourcetable.arr[j]) {mergedtable.arr[k]=sourcetable.arr[i];i++;k++;} else{mergedtable.arr[k]=sourcetable.arr[j];j++;k++;} if(i<=mid) for(int p=k,q=i;q<=mid;p++,q++) mergedtable.arr[p]=sourcetable.arr[q];//°Ñǰһ¶Î¸´ÖƵ½mergedtable else for(int p=k,q=j;q<=right;p++,q++) mergedtable.arr[p]=sourcetable.arr[q];//°ÑºóÒ»¶Î¸´ÖƵ½mergedtable } Ò»Ì˹鲢Ëã·¨ ÉèÊý×ésourcetable.arr[0]µ½sourcetable.arr[n-1]ÖеÄn¸öÊý¾ÝÔªËØÒѾ·ÖΪһЩ³¤¶ÈΪlenµÄ¹é²¢Ï½«ÕâЩ¹é²¢ÏîÁ½Á½¹é²¢£¬¹é²¢³ÉһЩ³¤¶ÈΪ2lenµÄ¹é²¢Ï½á¹û·Åµ½mergedtable.arr[]ÖС£Èç¹ûn²»ÊÇ2lenµÄÕûÊý±¶£¬ÔòÒ»Ì˹鲢µ½×îºó£¬¿ÉÄÜÓöµ½Á½ÖÖÇé¿ö£º Ê£ÏÂÒ»¸ö³¤¶ÈΪlenµÄ¹é²¢ÏîºÍÒ»¸ö³¤¶È²»×ãlenµÄ¹é²¢Ï¿ÉÓÃÒ»´ÎmergeËã·¨£¬½«ËüÃǹ鲢³ÉÒ»¸ö³¤¶ÈСÓÚ2lenµÄ¹é²¢Ïî¡£ ֻʣÏÂÒ»¸ö¹é²¢ÏÆä³¤¶ÈСÓÚ»òµÈÓÚlen£¬¿É½«ËüÖ±½Ó¸´ÖƵ½Êý×émergedtable.arr[]ÖС£ α´úÂëÈçÏ£º template sortlist int i=0; while(i+2*len<=currentsize-1)//±íʾÖÁÉÙÓиö×ÓÐòÁÐ { merge(sourcetable,mergedtable,i,i+len-1,i+2*len-1); i+=2*len; } if(i+len<=currentsize-1)//ÈôÖ»ÓÐ×îºóÁ½¸ö×ÓÐòÁÐ merge(sourcetable,mergedtable,i,i+len-1,currentsize-1); else//ÈôÖ»ÓÐ×îºóÒ»¸ö×ÓÐòÁÐ } ¹é²¢ÅÅÐò ÔÚÒ»Ì˹鲢Ëã·¨µÄ»ù´¡ÉÏ£¬ÊµÏÖÁ½Â·¹é²¢ÅÅÐòËã·¨¡£ÔÚÁ½Â·¹é²¢ÅÅÐòËã·¨ÖУ¬³õʼÅÅÐò±í´æ·ÅÔÚÊý×étable.arr[]ÖÐ,µÚÒ»Ì˹鲢½«table.arr[]ÖеĹ鲢ÏîÁ½Á½¹é²¢£¬½á¹û´æ·ÅÔÚ¸¨ÖúÊý×étemptable.arr[]ÖС£µÚ¶þÌ˽«temptable.arr[]ÖеĹ鲢ÏîÁ½Á½¹é²¢£¬½á¹û·Å»ØÔÊý×étable.arr[]ÖУ¬Èç´Ë·´¸´½øÐС£ÎªÁ˽«×îºó¹é²¢½á¹ûÈÔ·ÅÔÚÊý×étable.arr[]ÖУ¬¹é²¢ÌËÊýӦΪżÊý¡£Èç¹û×öÆæÊýÌ˾ÍÄÜÍê³Éʱ£¬×îºó»¹ÐèÒªÖ´ÐÐÒ»´ÎÒ»Ì˹鲢¹ý³Ì£¬ÓÉÓÚÕâʱµÄ¹é²¢Ï¶Èlen>=n£¬Òò´ËÔÚÔòÌ˹鲢ÖÐwhileÑ»·²»Ö´ÐУ¬Ö»×ö°Ñtemptable.arr[]ÖеÄÊý¾ÝÔªËØ¸´ÖƵ½table.arr[]µÄ¹¤×÷¡£ α´úÂëÈçÏ£º template void sortlist {//°´Êý¾ÝÔªËØ¹Ø¼ü×ַǵݼõµÄ˳Ðò¶ÔÅÅÐò±ítableÖÐÊý¾ÝÔªËØ½øÐеݹéÅÅÐò sortlist while(len mergepass(table,temptable,len);len*=2; mergepass(temptable,table,len);len*=2; } num=0; } <9>Ö÷º¯Êý Ö÷Òª¹¦ÄÜÊÇÏÔʾÖ÷²Ëµ¥£¬ÒÔ¼°¶Ô¸÷ÖÖÅÅÐòµÄµ÷Óà α´úÂëÈçÏ£º int main()//Ö÷º¯Êý { for(int j=i;j<=currentsize-1;j++) mergedtable.arr[j]=sourcetable.arr[j]; if(len<=currentsize-1) { if(num cout<<\µÚ\<<++num<<\ÌËÅÅÐò½á¹ûΪ:\; for(int t=0;t cout< cout<<\ ***********************************************************************\< cout<<\< cout<<\¿É¹©Ñ¡ÔñµÄÅÅÐò·½·¨===========================\< =======================================================================\< if(ch=='0') {cout<<\ÄúÒѳɹ¦Í˳ö¸Ãϵͳ!\< int n,number; if(ch>='0'&&ch<='7') { cout<<\ÊäÈëÄúÒª½øÐÐÅÅÐòµÄÊýµÄ¸öÊý£º\; cin>>n; cout<<\ÇëÊäÈë\< {cin>>number;table.insert(i,number);} switch(ch) { case '1': cout<<\ÄúÑ¡ÔñµÄÊÇÖ±½Ó²åÈëÅÅÐò*******\\n\< system(\); break; case '2': cout<<\ÄúÑ¡ÔñµÄÊÇÕÛ°ë²åÈëÅÅÐò*******\\n\<

