²áµî¥í¥°
No¡¥£±£±£±£¶¡¡¼Â¿ôÃͤΥǡ¼¥¿¤ò¥½¡¼¥È¤·¤¿¤¤¤Ç¤¹¡£qsort¤Ï»È¤¨¤Þ¤»¤ó¤«¡©
[Ìá¤ë]¡¡[¥Û¡¼¥à¥Ú¡¼¥¸]No.1866![]() |
¼Â¿ôÃͤΥǡ¼¥¿¤ò¥½¡¼¥È¤·¤¿¤¤¤Ç¤¹¡£qsort¤Ï»È¤¨¤Þ¤»¤ó¤«¡© Åê¹Æ¼Ô---¥Ô¥è¥Ô¥è(2004/06/01 14:02:47) |
||
½é¤á¤Þ¤·¤Æ¡£ ¼Â¿ôÃͤΥǡ¼¥¿¤ò¥½¡¼¥È¤·¤¿¤¤¤Ç¤¹¡£¾º½ç¡¦¹ß½ç¤ÏÌ䤤¤Þ¤»¤ó¡£ Ä´¤Ù¤¿¤È¤³¤íqsort¤¬»È¤¨¤ë¤«¤â¤È»×¤¤¡¢¤¤¤í¤¤¤í¤Ê¥×¥í¥°¥é¥à¤òÎã¤Ë ºî¤Ã¤Æ¤ß¤Þ¤·¤¿¡£À°¿ôÃͤÀ¤È¤¦¤Þ¤¯·ë²Ì¤¬¤Ç¤Þ¤¹¤¬¡¢ ¼Â¿ôÃͤÀ¤È¤¦¤Þ¤¯¤¤¤¤Þ¤»¤ó¡£ÇÛÎó¤òdouble·¿¤Ë¤«¤¨¤ë¤Ê¤É¤·¤Æ¤ß¤Þ¤·¤¿¤¬¡¢¤À¤á¤Ç¤·¤¿¡£ ºî¤Ã¤Æ¤ß¤¿¥×¥í¥°¥é¥à¤ò°Ê²¼¤ËºÜ¤»¤Þ¤·¤¿¡£À°¿ôÃͤǤ¦¤Þ¤¯¤¤¤¯¥×¥í¥°¥é¥à¤Ç¤¹¡£ ¶²¤ìÆþ¤ê¤Þ¤¹¤¬¶µ¤¨¤Æ¤¤¤¿¤À¤±¤Þ¤»¤ó¤Ç¤·¤ç¤¦¤«¡£ ¤Ê¤ª¡¢ºÇ½ªÅª¤Ë¤Ï¥Õ¥¡¥¤¥ë¤Ë½ñ¤«¤ì¤¿¥Ç¡¼¥¿¡Ê¼Â¿ôÃ͡ˤ«¤é¹½Â¤ÂΤη¿¤ÇÆÉ¤ß¼è¤ê¡¢¥½¡¼¥È¤¹¤ë¤Ä¤â¤ê¤Ç¤¤¤Þ¤¹¡£¤Ç¤¹¤Î¤Çºî¤ê¤«¤±¤Ç¤Ï¤¢¤ê¤Þ¤¹¤¬¥×¥í¥°¥é¥à¤Î³ºÅö²Õ½ê¤Ï¥³¥á¥ó¥Èʸ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£ ¤è¤í¤·¤¯¤ª´ê¤¤¤¤¤¿¤·¤Þ¤¹¡£ #include <stdio.h> #include <stdlib.h> int compare( const void *a, const void *b); int main(void){ /* FILE *fp1,*fp2; if( ( fp1 = fopen("in.log","r") ) == NULL) { printf("in.log is not here.\n"); return 0; } if( ( fp2 = fopen("out.log","w") ) == NULL) { printf("out.log is not here. \n"); return 0; } fp1 = fopen("in.log","r"); printf("read from in.log \n"); fp2 = fopen("out.log","w"); printf("stand by out file \n"); */ int obj[10]= {10,3,6,4,2,9,1,5,7,8}; int *swap[10]; int i=0; /* while(EOF != fscanf(fp1,"%lf\n",&obj[i]) )// { printf("%lf\n",obj[i]); i++; } */ for(i = 0; i<10; i++){ swap[i] = &obj[i]; } printf("¥½¡¼¥ÈÁ°\n"); for(i = 0; i<10; i++){ printf("%d ", *swap[i]); } qsort(&swap[0], 10, sizeof(int *), compare); printf("¥½¡¼¥È¸å\n"); for(i = 0; i<10; i++){ printf("%d ", *swap[i]); } return 0; } int compare( const void *a, const void *b) { return( ** (int **) a - ** (int **) b); } |
No.1867![]() |
Re:¼Â¿ôÃͤΥǡ¼¥¿¤ò¥½¡¼¥È¤·¤¿¤¤¤Ç¤¹¡£qsort¤Ï»È¤¨¤Þ¤»¤ó¤«¡© Åê¹Æ¼Ô---¥Ô¥è¥Ô¥è(2004/06/01 14:07:10) |
||
¤¹¤ß¤Þ¤»¤ó¡£´Ä¶¤¬È´¤±¤Æ¤ª¤ê¤Þ¤·¤¿¡£ VC++6.0¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ ¤è¤í¤·¤¯¤ª´ê¤¤¤¤¤¿¤·¤Þ¤¹¡£ |
No.1868![]() |
Re:¼Â¿ôÃͤΥǡ¼¥¿¤ò¥½¡¼¥È¤·¤¿¤¤¤Ç¤¹¡£qsort¤Ï»È¤¨¤Þ¤»¤ó¤«¡© Åê¹Æ¼Ô---nop(2004/06/01 14:19:50) |
||
>¼Â¿ôÃͤΥǡ¼¥¿¤ò¥½¡¼¥È¤·¤¿¤¤¤Ç¤¹¡£¾º½ç¡¦¹ß½ç¤ÏÌ䤤¤Þ¤»¤ó¡£ ¿¼¤¯¥Æ¥¹¥È¤·¤Æ¤Ê¤¤¤¬¡¢ ¤ª¤ª¤è¤½¤³¤ó¤Ê´¶¤¸¤Ç¡£ #include <stdio.h> #include <stdlib.h> int compare( const void *area1, const void *area2 ) { const double *value1 = (const double *)area1; const double *value2 = (const double *)area2; int ret = 0; /* ----- Èæ³Ó½èÍý ----- */ if( *value1<*value2 ) { ret = -1; } if( *value1>*value2 ) { ret = 1; } return ret; } int main( void ) { /* ----- ÆâÉôÊÑ¿ôÄêµÁ ----- */ double values[] = { 1.0, 5.2, 3.45, 0.002, 12.58, 4.23, 89.65, 0.25, 20.11 }; int i; /* ----- ¥½¡¼¥ÈÁ°¤Î¥Ç¡¼¥¿¤òɽ¼¨ ----- */ puts( "¥½¡¼¥ÈÁ°¤Î¥Ç¡¼¥¿¤òɽ¼¨" ); for( i=0; i<sizeof(values)/sizeof(values[0]); i++ ) { printf( "values[%d] = %f\n", i, values[i] ); } /* ----- ¥Ç¡¼¥¿¤Î¥½¡¼¥È ----- */ qsort( values, sizeof(values)/sizeof(values[0]), sizeof(values[0]), compare ); /* ----- ¥½¡¼¥È¸å¤Î¥Ç¡¼¥¿¤òɽ¼¨ ----- */ puts( "¥½¡¼¥È¸å¤Î¥Ç¡¼¥¿¤òɽ¼¨" ); for( i=0; i<sizeof(values)/sizeof(values[0]); i++ ) { printf( "values[%d] = %f\n", i, values[i] ); } return 0; } |
No.1869![]() |
ÁᮤΤ´ÊÖÅú¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ Åê¹Æ¼Ô---¥Ô¥è¥Ô¥è(2004/06/01 14:41:45) |
||
¤ªÀ¤Ïäˤʤê¤Þ¤¹¡£ nopÅ¡¡ÁᮤΤ´ÊÖÅú¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ º£¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤Þ¤·¤¿¤È¤³¤íÀµ³Î¤Ë¥½¡¼¥È¤¬¤Ç¤¤Æ¤ª¤ê¤Þ¤·¤¿¡£ ËÜÅö¤Ë¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ nopÅÂ¤Î¥×¥í¥°¥é¥à¤È»ä¤Î¥×¥í¥°¥é¥à¤È¤òÈæ³Ó¤·¡¢¤Ê¤¼ »ä¤Î¥×¥í¥°¥é¥à¤¬¤¦¤Þ¤¯Æ°¤«¤Ê¤«¤Ã¤¿¤Î¤«¸¡Æ¤¤·¤Æ¤ß¤Þ¤¹¡£ ¤Þ¤À¤Þ¤ÀÊÙ¶¯ÉÔ¤Ǥ¹¤¬º£Èչͤ¨¤Æ¤ß¤Þ¤¹¡£ ¡Êqsort¤ÎÂ裳¥Ñ¥é¥á¡¼¥¿¤Ê¤Î¤«¤Ê¤¡¡Ä¡Ë µÞ¤®¤ªÎé¤ò¤ªÅÁ¤¨¤·¤¿¤¯Åê¹Æ¤·¤Þ¤·¤¿¡£ |
No.1870![]() |
Re:ÁᮤΤ´ÊÖÅú¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ Åê¹Æ¼Ô---nop(2004/06/01 15:27:49) |
||
>»ä¤Î¥×¥í¥°¥é¥à¤¬¤¦¤Þ¤¯Æ°¤«¤Ê¤«¤Ã¤¿¤Î¤«¸¡Æ¤¤·¤Æ¤ß¤Þ¤¹¡£ >¤Þ¤À¤Þ¤ÀÊÙ¶¯ÉÔ¤Ǥ¹¤¬º£Èչͤ¨¤Æ¤ß¤Þ¤¹¡£ >¡Êqsort¤ÎÂ裳¥Ñ¥é¥á¡¼¥¿¤Ê¤Î¤«¤Ê¤¡¡Ä¡Ë qsort()¤Î°ú¿ô¤â¤½¤¦¤Ç¤¹¤¬¡¢ Èæ³Ó´Ø¿ô¤Î½ñ¤Êý¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹¡£ Èæ³Ó´Ø¿ô¤Ï¡¢qsort()ÆâÉô¤ÇÍ×ÁǤÎÈæ³Ó¤¬¤¢¤ë»þ¤Ë¸Æ¤Ð¤ì¤Þ¤¹¡£ ¤½¤ÎºÝ¡¢Èæ³Ó¤¹¤ëÆó¤Ä¤ÎÍ×ÁǤÎÎΰè¤ÎÀèÆ¬¥Ý¥¤¥ó¥¿Ãͤò°ú¿ô¤È¤·¤ÆÅϤ·¤Þ¤¹¡£ Èæ³Ó´Ø¿ôÆâ¤Ç¤Ï¡¢¤³¤Î¥Ý¥¤¥ó¥¿¤òŬÀڤʷ¿¤Ë¥¥ã¥¹¥È¤ÇÅö¤Æ¤Ï¤á¡¢ Æó¤Ä¤ÎÍ×ÁǤÎÈæ³Ó·ë²Ì¤òÊÖ¤·¤Þ¤¹¡£ Èæ³Ó¤Î»ÅÊý¤Ï¡¢¡Öqsort()¤Ë¤É¤ó¤ÊÇÛÎó¤òÅϤ¹¤«¡©¡×¤ä¡¢ ¡Öʤӽç¤Ï¾º½ç¤«¡©¤½¤ì¤È¤â¹ß½ç¤«¡©¡×¤Ê¤É¤Ë¤è¤Ã¤ÆÊѤï¤ê¤Þ¤¹¤¬¡¢ Æó¤Ä¤ÎÍ×ÁǤ¬Åù¤·¤¤¾ì¹ç¤Ë¤Ï0¤ò¡¢ Âè°ì°ú¿ô¤ÎÍ×ÁǤ¬¡¢ÂèÆó°ú¿ô¤ÎÍ×ÁǤè¤ê¾®¤µ¤¤¾ì¹ç¤Ë¤ÏÉé¿ô¡¢ Âè°ì°ú¿ô¤ÎÍ×ÁǤ¬¡¢ÂèÆó°ú¿ô¤ÎÍ×ÁǤè¤êÂ礤¤¾ì¹ç¤Ë¤ÏÀ°¿ô¤ò¡¢ ¤½¤ì¤¾¤ìÊÖ¤¹»ö¤Ç qsort() ¤Ç¥½¡¼¥È¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤Þ¤¹¡£ |
No.1873![]() |
qsort¡¢Èæ³Ó´Ø¿ô¤òºÆÅÙÍý²ò¤·¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¤Í¡£¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ Åê¹Æ¼Ô---¥Ô¥è¥Ô¥è(2004/06/01 21:05:41) |
||
>qsort()¤Î°ú¿ô¤â¤½¤¦¤Ç¤¹¤¬¡¢ >Èæ³Ó´Ø¿ô¤Î½ñ¤Êý¤¬´Ö°ã¤Ã¤Æ¤¤¤Þ¤¹¡£ ¤´»ØÅ¦¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ qsort¤Î¥Ñ¥é¥á¡¼¥¿¤Ë¤Ä¤¤¤Æ¤ÏËܤäHPÅù¤ËºÜ¤Ã¤Æ¤¢¤ë¤Î¤Ç Ŭµ¹¥Ñ¥é¥á¡¼¥¿ÅùÊѤ¨¤Æ¤¤¤±¤Ð¤¤¤¤¤È»×¤Ã¤Æ¤¤¤Þ¤·¤¿¤¬ Íý²ò¤¬ÉÔ¤·¤Æ¤¤¤Þ¤·¤¿¡£ ¤µ¤Ã¤½¤¯¥Õ¥¡¥¤¥ë¤«¤éÆÉ¤ß¼è¤ì¤ë¤è¤¦¤Ë¤·¤Æ¡¢ ¼¡¤Ë¹½Â¤ÂΤdzÊǼ¤·¤¿¥Ç¡¼¥¿¤ò¥½¡¼¥È¤Ç¤¤ë¤è¤¦¤Ë¤·¤Æ¤ß¤Þ¤¹¡£ ¤´¶¨ÎϤ¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤·¤¿¡£ |
No.1875![]() |
¤Ò¤È¤Äµ¿Ì䤬¤¢¤ê¤Þ¤¹¡£¥Ç¡¼¥¿¿ô¤¬¤¢¤é¤«¤¸¤á¤ï¤«¤é¤Ê¤¤¤È¤¤ÏÇÛÎó¤ÎÀë¸À¤¬¤Ç¤¤Þ¤»¤ó¤«¡© Åê¹Æ¼Ô---¥Ô¥è¥Ô¥è(2004/06/01 22:58:45) |
||
¥Õ¥¡¥¤¥ë¤«¤é¥Ç¡¼¥¿¡Ê¼Â¿ôÃ͡ˤòÆÉ¤ß¼è¤ê¡¢¤½¤Î¥Ç¡¼¥¿¤ò¥½¡¼¥È¤µ¤»¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹¡£¥Õ¥¡¥¤¥ë¤Ë¥Ç¡¼¥¿¤¬¤¤¤¯¤Ä¤¢¤ë¤Î¤«¤Ï¤¢¤é¤«¤¸¤á¤ï¤«¤é¤Ê¤¤¾õÂ֤Ǥ¹¡£¤³¤Î¾ì¹ç¤À¤Èqsort¤Ë¤¤¤ì¤ë¥µ¥¤¥º¤¬¤¢¤é¤«¤¸¤á¤ï¤«¤ê¤Þ¤»¤ó¡£¤É¤Î¤è¤¦¤Ë¤¹¤ì¤Ð¤è¤í¤·¤¤¤Ç¤·¤ç¤¦¤«¡£ nopÅÂ¤Î¥×¥í¥°¥é¥à¤Ç¤Ï double values[] = { 1.0, 5.2, 3.45, 0.002, 12.58, 4.23, 89.65, 0.25, 20.11 }; ¤È¤¢¤é¤«¤¸¤áÇÛÎóvalues¤Î¥µ¥¤¥º¤¬¤ï¤«¤Ã¤Æ¤ª¤êqsort¤ò»È¤¨¤Þ¤¹¤¬ #define num 10000 double values[num]; int i=0; ¡¦¡¦¡¦¥Õ¥¡¥¤¥ë¥Ý¥¤¥ó¥¿Ê¸Åù¡¦¡¦¡¦ while(EOF != fscanf(fp1,"%lf\n",&values[i]) ){ i++;}//¥Õ¥¡¥¤¥ë¤Î½ª¤ï¤ê¤Þ¤Ç¥Ç¡¼¥¿¤ò¼èÆÀ¤¹¤ë¡£ ¤È¤¤¤Ã¤¿´¶¤¸¤Ç¥Õ¥¡¥¤¥ë¤«¤é¥Ç¡¼¥¿¤ò¼è¤ê¹þ¤à¾ì¹ç,ºÇ¸å¤Îi++¤Î¿ô»ú¤¬¤Û¤·¤¤ÇÛÎó¤Î¥µ¥¤¥º¤Ë¤Ê¤ê¤Þ¤¹¡£¤Ç¤¹¤¬¼ÂºÝ¤Ïsizeof(values)¤Ïnum¤Î¿ô¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ »î¤·¤Ëqsort¤Îsizeof(values)¤Ëi¤ÎÃͤòÆþ¤ì¤Æ¤ß¤Þ¤·¤¿¤¬¤¦¤Þ¤¯¤¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£ ¥Õ¥¡¥¤¥ë¤«¤é¥Ç¡¼¥¿¤ò¼èÆÀ¤·¤¿¸å¤Ë¥½¡¼¥È¤ÎÂоݿô¤¬Ê¬¤«¤ê¤Þ¤¹¡£ ¤è¤¤¥¢¥¤¥Ç¥¢¤ò¤è¤í¤·¤¯¤ª´ê¤¤¤¤¤¿¤·¤Þ¤¹¡£ ¡Ú·Ð°Þ¡Û ¤È¤¢¤ë¥í¥°¥Õ¥¡¥¤¥ë¤Ë¥Ç¡¼¥¿¤¬½ñ¤«¤ì¤Æ¤¢¤ê¤Þ¤¹¡£ ¤½¤Î¥Õ¥¡¥¤¥ë¤«¤é¥Ç¡¼¥¿¤òÆÉ¤ß¼è¤ê¥½¡¼¥È¤·¤¿¤¤¤È»×¤Ã¤Æ¤¤¤Þ¤¹¡£ ¤Þ¤¿¡¢¥Õ¥¡¥¤¥ë¤Ë¤Ï;ʬ¤Ê¥Ç¡¼¥¿¤¬¤¢¤ë¤Î¤ÇÈϰϤò»ØÄꤷ¤Æ¥½¡¼¥È¤¹¤ëͽÄê¤Ç¤¹¡£Î㤨¤Ð¥í¥°¥Õ¥¡¥¤¥ë¤Ë¤Ï£µ·î£³£°Æü¤«¤é£¶·î£²Æü¤Þ¤Ç£±»þ´ÖËè¤Ë¥Ç¡¼¥¿¤¬¤¢¤ê¤Þ¤¹¡££¶·î£±Æüʬ¤Î¥Ç¡¼¥¿¤À¤±¤ò¼è¤ê½Ð¤·¤Æ¥½¡¼¥È¤¹¤ë¤È¤¤¤Ã¤¿´¶¤¸¤Ç¤¹¡£ |
No.1876![]() |
Re:¤Ò¤È¤Äµ¿Ì䤬¤¢¤ê¤Þ¤¹¡£¥Ç¡¼¥¿¿ô¤¬¤¢¤é¤«¤¸¤á¤ï¤«¤é¤Ê¤¤¤È¤¤ÏÇÛÎó¤ÎÀë¸À¤¬¤Ç¤¤Þ¤»¤ó¤«¡© Åê¹Æ¼Ô---nop(2004/06/01 23:45:00) |
||
>¥Õ¥¡¥¤¥ë¤«¤é¥Ç¡¼¥¿¡Ê¼Â¿ôÃ͡ˤòÆÉ¤ß¼è¤ê¡¢¤½¤Î¥Ç¡¼¥¿¤ò¥½¡¼¥È¤µ¤»¤è¤¦¤È¤·¤Æ¤¤¤Þ¤¹¡£ >¥Õ¥¡¥¤¥ë¤Ë¥Ç¡¼¥¿¤¬¤¤¤¯¤Ä¤¢¤ë¤Î¤«¤Ï¤¢¤é¤«¤¸¤á¤ï¤«¤é¤Ê¤¤¾õÂ֤Ǥ¹¡£ >¤³¤Î¾ì¹ç¤À¤Èqsort¤Ë¤¤¤ì¤ë¥µ¥¤¥º¤¬¤¢¤é¤«¤¸¤á¤ï¤«¤ê¤Þ¤»¤ó¡£ ¥Õ¥¡¥¤¥ë¤ò¼è¤ê¹þ¤á¤Ð¡¢¥½¡¼¥È¤·¤¿¤¤¥Ç¡¼¥¿¤Î¸Ä¿ô¤Ïµá¤Þ¤ë¤Ï¤º¤Ç¤¹¡£ ¤½¤Î¸Ä¿ô¤òqsort() ¤ÎÂèÆó°ú¿ô¤Ë¤½¤Î¤Þ¤Þ»ØÄꤹ¤ì¤ÐÎɤ¤¤Ç¤¹¡£ >#define num 10000 >double values[num]; >sizeof(values)¤Ïnum¤Î¿ô¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ sizeof±é»»»Ò¤ÇÆÀ¤é¤ì¤ë¤Î¤Ï¡¢ÇÛÎó¤Î¸Ä¿ô¤Ç¤Ï¤Ê¤¯¥Ð¥¤¥È¿ô¤Ç¤¹¡£ ½¾¤Ã¤Æ¡¢sizeof(values) ¤ÎÃͤϡÖnum * sizeof(double)¡×¤Ë¤Ê¤ê¤Þ¤¹¡£ >»î¤·¤Ëqsort¤Îsizeof(values)¤Ëi¤ÎÃͤòÆþ¤ì¤Æ¤ß¤Þ¤·¤¿¤¬¤¦¤Þ¤¯¤¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£ ÊÑ¿ô¡Öi¡×¤¬¥Ç¡¼¥¿¤Î¸Ä¿ô¤ò¼¨¤·¤Æ¤¤¤ë¤Î¤Ê¤é¡¢ ¡Ösizeof(values)¡×¤ò¡Öi¡×¤ËÊѤ¨¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢ ¡Ösizeof(values)/sizeof(values[0])¡×¤ò¡Öi¡×¤ËÊѤ¨¤Æ²¼¤µ¤¤¡£ qsort()¤ÎÂèÆó°ú¿ô¤ÇÍ¿¤¨¤ëÃͤÏÍ×ÁǤοô¤Ç¤¹¤«¤é¡£ ¤½¤ì¤«¤é¡¢¹½Â¤ÂÎÇÛÎó¤Î¥½¡¼¥È¤ò¹Ô¤¤¤¿¤¤¤è¤¦¤Ê¤Î¤Ç¡¢ ÇÛÎóÊÑ¿ô¡Övalues¡×¤ò¹½Â¤ÂÎÇÛÎó¤ËÊѤ¨¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢ qsort()¤ÎÂè»°°ú¿ô¤Ë¤âÃí°Õ¤·¤Æ²¼¤µ¤¤¡£ °Ê²¼¤Ë¡¢¹½Â¤ÂÎÇÛÎó¤Î¾ì¹ç¤Î¥½¡¼¥È¤ÎÎã¤âºÜ¤»¤Æ¤ª¤¤Þ¤¹¡£ ¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char Name[32]; int Value; } strTestData; int compare( const void *area1, const void *area2 ) { const strTestData *value1 = (const strTestData *)area1; const strTestData *value2 = (const strTestData *)area2; int ret; /* ----- Èæ³Ó½èÍý ----- */ ret = value1->Value - value2->Value; if( ret==0 ) { ret = strcmp( value1->Name, value2->Name ); } return ret; } int main( void ) { /* ----- ÆâÉôÊÑ¿ôÄêµÁ ----- */ strTestData iData[1024] = {0}; FILE *iFp; char iLine[512] = {0}; int iCount = 0; int i; char *p; /* ---------------------------------------- ¥Õ¥¡¥¤¥ë¤«¤é¥Ç¡¼¥¿¤òÆÉ¤ß¹þ¤à ---------------------------------------- */ iFp = fopen( "test.txt", "r" ); if( iFp ) { while( iCount<1024 && fgets(iLine,sizeof(iLine),iFp)!=NULL ) { p = strtok( iLine, "=" ); strncpy( iData[iCount].Name, p, sizeof(iData[iCount].Name) ); p = strtok( NULL, "\n" ); iData[iCount].Value = strtol( p, NULL, 10 ); iCount++; } fclose( iFp ); } /* ---------------------------------------- ¥½¡¼¥ÈÁ°¤Î¥Ç¡¼¥¿¤òɽ¼¨ ---------------------------------------- */ printf( "¥½¡¼¥ÈÁ°¥Ç¡¼¥¿ (%d ¸Ä)\n", iCount ); for( i=0; i<iCount; i++ ) { printf( "%s : %d\n", iData[i].Name, iData[i].Value ); } /* ---------------------------------------- ¥Ç¡¼¥¿¤ò¥½¡¼¥È ---------------------------------------- */ qsort( iData, iCount, sizeof(iData[0]), compare ); /* ---------------------------------------- ¥½¡¼¥È¸å¤Î¥Ç¡¼¥¿¤òɽ¼¨ ---------------------------------------- */ printf( "\n¥½¡¼¥È¸å¥Ç¡¼¥¿ (%d ¸Ä)\n", iCount ); for( i=0; i<iCount; i++ ) { printf( "%s : %d\n", iData[i].Name, iData[i].Value ); } return 0; } ¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý¡Ý ¢¨¡Ötest.txt¡×¤È¸À¤¦¥Õ¥¡¥¤¥ë¤òÍѰդ·¡¢ ¡¡¡Ö̾Á°=Ã͡פηÁ¼°¤Ç½ñ¤«¤ì¤¿¥Æ¥¥¹¥È¤ò¿ô¹ÔÆþ¤ì¤Æ²¼¤µ¤¤¡£ [test.txt¤ÎÎã] test=10 data=1024 hoge=35 huge=564 foo=224 info=1 charsize=1 intsize=4 retrycount=15 |
No.1878![]() |
¤¦¤Þ¤¯¤¤¤¤Þ¤·¤¿¡£¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ Åê¹Æ¼Ô---¥Ô¥è¥Ô¥è(2004/06/02 01:21:00) |
||
nopÅ >¡Ösizeof(values)/sizeof(values[0])¡×¤ò¡Öi¡×¤ËÊѤ¨¤Æ²¼¤µ¤¤¡£ ¤¦¤Þ¤¯¤¤¤¤Þ¤·¤¿¡£¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ >¥Õ¥¡¥¤¥ë¤ò¼è¤ê¹þ¤á¤Ð¡¢¥½¡¼¥È¤·¤¿¤¤¥Ç¡¼¥¿¤Î¸Ä¿ô¤Ïµá¤Þ¤ë¤Ï¤º¤Ç¤¹¡£ ¶Ä¤ë¤È¤ª¤ê¤Ç¤¹¡£ while(EOF != fscanf(fp1,"%lf\n",&values[i]) )¤È¤¤¤Ã¤¿¶ñ¹ç¤Ë¥Õ¥¡¥¤¥ë¤Î½ª¤ï¤ê¤Þ¤Ç¥ë¡¼¥×¤ò²ó¤·¥Ç¡¼¥¿¤ò¼èÆÀ¤·¤Æ¤¤¤ë¤Î¤Ç¤³¤ÎºÇ¸å¤Îi¤¬µá¤á¤¿¤¤¸Ä¿ô¤Ë¤Ê¤ê¤Þ¤¹¡£ >sizeof±é»»»Ò¤ÇÆÀ¤é¤ì¤ë¤Î¤Ï¡¢ÇÛÎó¤Î¸Ä¿ô¤Ç¤Ï¤Ê¤¯¥Ð¥¤¥È¿ô¤Ç¤¹¡£ ¤´»ØÅ¦¤¤¤¿¤À¤¤¤¿ÅÀ¤ò¾Ê¤ß¤ë¤È·ë¶É»ä¤Ïqsort¤òÍý²ò¤Ç¤¤Æ¤¤¤Ê¤«¤Ã¤¿¤È¤¤¤¦¤³¤È¤Ç¤¹¤Í¡£ >°Ê²¼¤Ë¡¢¹½Â¤ÂÎÇÛÎó¤Î¾ì¹ç¤Î¥½¡¼¥È¤ÎÎã¤âºÜ¤»¤Æ¤ª¤¤Þ¤¹¡£ ¤ª¼ê¿ô¤ò¤ª¤«¤±¤·¤Æ¿½¤·Ìõ¤¢¤ê¤Þ¤»¤ó¡£´¶¼Õ¤Îµ¤»ý¤Á¤Ç¤¤¤Ã¤Ñ¤¤¤Ç¤¹¡£ ¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤¿¤È¤³¤í¸«»ö¤Ë¥½¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤·¤¿¡£ >ÇÛÎóÊÑ¿ô¡Övalues¡×¤ò¹½Â¤ÂÎÇÛÎó¤ËÊѤ¨¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢ >qsort()¤ÎÂè»°°ú¿ô¤Ë¤âÃí°Õ¤·¤Æ²¼¤µ¤¤¡£ Âè3°ú¿ô¤Ï¡¢Ê¤ÙÂØ¤¨¤ëÇÛÎó¤ÎÍ×ÁÇ1¤Ä¤ÎÂ礤µ¤Ç¤¢¤Ã¤Æ¡¢ sizeof(Í×ÁǤη¿)¤òÅϤ¹¤È¤¤¤¦¤³¤È¤Ç¤è¤í¤·¤¤¤Ç¤·¤ç¤¦¤«¡£ ºî¤Ã¤Æ¤¤¤¿¤À¤¤¤¿Îã¤Ç¹Í¤¨¤Þ¤¹¤È¡¢ ¹½Â¤ÂÎstrTestData·¿ÇÛÎó¤Î¤Ò¤È¤Ä¤ÎÍ×ÁÇ(iData[0])¤ÎÂ礤µ¤ò»ØÄꤹ¤ë ¤È¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¤Ç¤·¤ç¤¦¤«¡£ Ū³Î¤Ê¥Ý¥¤¥ó¥È¤ò¶µ¤¨¤Æ¤¤¤¿¤À¤¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ |
No.1885![]() |
À޳ѽñ¤¤¤Æ¤¤¤¿¤À¤¤¤¿Îã¤òÍý²ò¤·¤¿¤¯Â¸¤¸¤Þ¤¹¡£Ä´¤Ù¤Æ¤Ï¤¤¤Þ¤¹¤¬º£¤Ò¤È¤ÄÍý²ò¤Ç¤¤Æ¤ª¤ê¤Þ¤»¤ó¡£ Åê¹Æ¼Ô---¥Ô¥è¥Ô¥è(2004/06/02 16:09:40) |
||
¤ªÀ¤Ïäˤʤê¤Þ¤¹¡£ ¥Õ¥¡¥¤¥ë¤Ë½ñ¤«¤ì¤¿¼Â¿ôÃͤò¹½Â¤ÂÎ¤ÇÆÉ¤ß¼è¤ê¥½¡¼¥È¤¹¤ë¥×¥í¥°¥é¥à¤òºî¤Ã¤Æ¤ª¤ê¤Þ¤¹¡£¤Þ¤º¡¢nopŤ˺î¤Ã¤Æ¤¤¤¿¤À¤¤¤¿Îã¤òÍѤ¤¤Æ¼Â¿ôÃͤò¥½¡¼¥È¤¹¤ë¤è¤¦¤Ëºî¤Ã¤Æ¤ª¤ê¤Þ¤¹¡£ ñ¤Ë int Value;¤òdouble Value; ¤È¤¹¤ë¤È ret = value1->Value - value2->Value; ¤Çwarning¤¬¤Ç¤Þ¤¹¡£ret¤Ïint·¿¤Ê¤Î¤ÇÅöÁ³¤Ç¤¹¡£¶¯°ú¤Ë¥Ó¥ë¥É¤·¤Æ¼Â¹Ô¤¹¤ë¤È ·ë²Ì¤Ï¤¤Á¤ó¤È¥½¡¼¥È¤µ¤ì¤Þ¤¹¤¬Ç¼ÆÀ¤¤¤¤Þ¤»¤ó¡£ »ä¤¬Íý²ò¤Ç¤¤Æ¤¤¤Ê¤¤ÅÀ¤ÏΨľ¤Ë¿½¤·¤Þ¤¹¤È¡¢ int compare( const void *area1, const void *area2 ) { const strTestData *value1 = (const strTestData *)area1; const strTestData *value2 = (const strTestData *)area2; int ret; /* ----- Èæ³Ó½èÍý ----- */ ret = value1->Value - value2->Value; ¤ÎÉôʬ¤Ç¤¹¡£ ÉôʬŪ¤ËÍý²ò¤Ç¤¤Æ¤¤¤ëÅÀ¤Ï¡¢ ¡¦const ¤ÏÊÑ¿ô¤ÎÆâÍÆ¤òÊѹ¹¤Ç¤¤Ê¤¤¤³¤È¤òɽ¤¹¡£ ¡¦¤³¤ÎÎã¤Î¾ì¹ç¥Ý¥¤¥ó¥¿*area1¡¢*area2¤ÎÃͤòÊѹ¹¤Ç¤¤Ê¤¤¤³¤È¤ò°ÕÌ£¤·¤Æ¤¤¤ë¡£ ¡¦value1->Name¤Ë¤Ä¤¤¤Æ¤Ï¥Ý¥¤¥ó¥¿ÊÑ¿ôvalue1¤òÍѤ¤¤ÆstrTestData·¿¤ÎValue ¤Î¥Ç¡¼¥¿¡ÊiData[i].Value¤Î¥Ç¡¼¥¿¡Ë¤ò»²¾È¤·¤Æ¤¤¤ë¡£ ¡¦compare¤ÏÈæ³Ó´Ø¿ô¤Ç¤¢¤ë¤³¤È¡£½é¤á¤ËnopŤ«¤é¤´»ØÅ¦¤ò¼õ¤±¤Þ¤·¤¿¡£ nopŤ˺î¤Ã¤Æ¤¤¤¿¤À¤¤¤¿Îã¤òÍý²ò¤¹¤Ù¤¯¤Þ¤¿¡¢ warning¤¬¤Ç¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤Ë¤Ï¤É¤¦¤¹¤ì¤Ð¤¤¤¤¤Î¤«¤¤¤í¤¤¤íÄ´¤Ù¤Æ¤ª¤ê¤Þ¤¹¡£ ¤Ê¤ª¡¢»ä¤¬¤â¤Ã¤Æ¤¤¤ëËÜ¤Ï ¥×¥í¥°¥é¥ß¥ó¥°¸À¸ìC¡ÖB.W.¥«¡¼¥Ë¥Ï¥ó (Ãø),D.M.¥ê¥Ã¥Á¡¼ (Ãø),ÀÐÅÄ À²µ×¡× º£¤µ¤éʹ¤±¤Ê¤¤C¤Î´ðÁáֻ³²¬ ¾Í(Ãø)¡× ¤Ç¤¹¡£ º¹¤·»Ù¤¨¤Ê¤±¤ì¤Ð¶²¤ìÆþ¤ê¤Þ¤¹¤¬¤´¶µ¼ø¤ÎÄø¤è¤í¤·¤¯¤ª´ê¤¤Ãפ·¤Þ¤¹¡£ |
No.1887![]() |
Re:À޳ѽñ¤¤¤Æ¤¤¤¿¤À¤¤¤¿Îã¤òÍý²ò¤·¤¿¤¯Â¸¤¸¤Þ¤¹¡£Ä´¤Ù¤Æ¤Ï¤¤¤Þ¤¹¤¬º£¤Ò¤È¤ÄÍý²ò¤Ç¤¤Æ¤ª¤ê¤Þ¤»¤ó¡£ Åê¹Æ¼Ô---nop(2004/06/02 17:08:17) |
||
>ñ¤Ë int Value;¤òdouble Value; ¤È¤¹¤ë¤È >ret = value1->Value - value2->Value; >¤Çwarning¤¬¤Ç¤Þ¤¹¡£ret¤Ïint·¿¤Ê¤Î¤ÇÅöÁ³¤Ç¤¹¡£¶¯°ú¤Ë¥Ó¥ë¥É¤·¤Æ¼Â¹Ô¤¹¤ë¤È >·ë²Ì¤Ï¤¤Á¤ó¤È¥½¡¼¥È¤µ¤ì¤Þ¤¹¤¬Ç¼ÆÀ¤¤¤¤Þ¤»¤ó¡£ ¤¦¤Þ¤¯¸À¤Ã¤Æ¤¤¤ë¤Î¤Ï¤¿¤Þ¤¿¤Þ¤Ç¤·¤ç¤¦¡£ double ¤«¤é int ¤Ë·¿ÊÑ´¹¤ò¤¹¤ì¤Ð¡¢ ÀÚ¤ê¼Î¤Æ¤Ë¤è¤ë¸íº¹¤¬À¸¤¸¡¢Àµ¤·¤¯¥½¡¼¥È¤µ¤ì¤ë¾ì¹ç¤È¡¢ Àµ¤·¤¯¥½¡¼¥È¤µ¤ì¤Ê¤¤¾ì¹ç¤¬È¯À¸¤¹¤ë»ö¤¬¹Í¤¨¤é¤ì¤Þ¤¹¡£ >»ä¤¬Íý²ò¤Ç¤¤Æ¤¤¤Ê¤¤ÅÀ¤ÏΨľ¤Ë¿½¤·¤Þ¤¹¤È¡¢ >int compare( const void *area1, const void *area2 ) >{ > const strTestData *value1 = (const strTestData *)area1; > const strTestData *value2 = (const strTestData *)area2; > int ret; > > /* ----- Èæ³Ó½èÍý ----- */ > ret = value1->Value - value2->Value; >¤ÎÉôʬ¤Ç¤¹¡£ Èæ³Ó´Ø¿ô¤ÎÌá¤êÃͤÎÀâÌÀ¤Ï¡¢Á°¤ÎÅê¹Æ¤Ç¤·¤Æ¤¤¤¿¤È»×¤¤¤Þ¤¹¡£ ´ðËÜŪ¤Ë¤Ï¡¢Æó¤Ä¤ÎÍ×ÁǤòÈæ³Ó¤·¡¢ ¤½¤Î·ë²Ì¡¢Æó¤Ä¤ÎÍ×ÁǤ¬Åù¤·¤¤¾ì¹ç¤Ë¤Ï0¤ò¡¢ Âè°ì°ú¿ô¤ÎÍ×ÁǤ¬¡¢ÂèÆó°ú¿ô¤ÎÍ×ÁǤè¤ê¾®¤µ¤¤¾ì¹ç¤Ë¤ÏÉé¿ô¡¢ Âè°ì°ú¿ô¤ÎÍ×ÁǤ¬¡¢ÂèÆó°ú¿ô¤ÎÍ×ÁǤè¤êÂ礤¤¾ì¹ç¤Ë¤ÏÀµ¿ô¤ò¡¢ ¤½¤ì¤¾¤ìÊÖ¤»¤ÐÎɤ¤Ìõ¤Ç¤¹¡£ ÉâÆ°¾®¿ôÅÀ¿ô¤Î¾ì¹ç¤Î¥Ñ¥¿¡¼¥ó¤â¡¢Á°¤ÎÅê¹Æ¤Ç int compare( const void *area1, const void *area2 ) { const double *value1 = (const double *)area1; const double *value2 = (const double *)area2; int ret = 0; /* ----- Èæ³Ó½èÍý ----- */ if( *value1<*value2 ) { ret = -1; } if( *value1>*value2 ) { ret = 1; } return ret; } ¤È¼¨¤·¤Æ¤¤¤ë¤Ï¤º¤Ç¤¹¡£ ¤³¤ì¤ò±þÍѤ¹¤ì¤ÐÎɤ¤¤«¤È»×¤¤¤Þ¤¹¡£ # int ·¿¤Î¾ì¹ç¡¢Èæ³Ó·ë²Ì¤ò¸º»»¤Ç»»½Ð¤Ç¤¤ë¤Î¤Ï²¿¸Î¤«¡© # ¤³¤ÎÊÕ¤ê¤ò¡¢¿ô³ØÅª¤Ë¹Í¤¨¤Æ¤ß¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£ |
No.1895![]() |
Re:À޳ѽñ¤¤¤Æ¤¤¤¿¤À¤¤¤¿Îã¤òÍý²ò¤·¤¿¤¯Â¸¤¸¤Þ¤¹¡£Ä´¤Ù¤Æ¤Ï¤¤¤Þ¤¹¤¬º£¤Ò¤È¤ÄÍý²ò¤Ç¤¤Æ¤ª¤ê¤Þ¤»¤ó¡£ Åê¹Æ¼Ô---¤«¤º¤Þ(2004/06/02 21:33:59) |
||
> # int ·¿¤Î¾ì¹ç¡¢Èæ³Ó·ë²Ì¤ò¸º»»¤Ç»»½Ð¤Ç¤¤ë¤Î¤Ï²¿¸Î¤«¡© > # ¤³¤ÎÊÕ¤ê¤ò¡¢¿ô³ØÅª¤Ë¹Í¤¨¤Æ¤ß¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£ i = 2000000000, j = -2000000000, k = i - j ¤Î¾ì¹ç¡¢ i > j ¤Ç¤¹¤¬¡¢k ¤¬Àµ¤Ë¤Ê¤ë¤È¤Ï¸Â¤ê¤Þ¤»¤ó¡£ |
No.1896![]() |
Re:À޳ѽñ¤¤¤Æ¤¤¤¿¤À¤¤¤¿Îã¤òÍý²ò¤·¤¿¤¯Â¸¤¸¤Þ¤¹¡£Ä´¤Ù¤Æ¤Ï¤¤¤Þ¤¹¤¬º£¤Ò¤È¤ÄÍý²ò¤Ç¤¤Æ¤ª¤ê¤Þ¤»¤ó¡£ Åê¹Æ¼Ô---RAPT(2004/06/02 22:16:50) |
||
C¸À¸ì¤Ç¤Ï¼°¤¬¿¿¤Î¤È¤ 1¡¢µ¶¤Î¤È¤ 0 ¤È¤Ê¤ë»ÅÍͤǤ¢¤ë¤³¤È¤È 3¹à±é»»»Ò¤ò»È¤¨¤Ð¡¢¤³¤ó¤Ê¤³¤È¤â¡£ int compare(const void *a, const void *b) { const int *x = (const int *)a; const int *y = (const int *)b; return (*x < *y)?(-1):(*x > *y); } |
No.1916![]() |
³§ÍÍ¥¢¥É¥Ð¥¤¥¹¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ Åê¹Æ¼Ô---¥Ô¥è¥Ô¥è(2004/06/04 09:13:50) |
||
¤ª¤Ï¤è¤¦¤´¤¶¤¤¤Þ¤¹¡£ ³§ÍÍ¥¢¥É¥Ð¥¤¥¹¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ nopÅ ¤´»ØÆ³¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£Èæ³Ó´Ø¿ô¤ÎÌá¤êÃͤˤĤ¤¤Æ¸í²ò¤·¤Æ¤ª¤ê¤Þ¤·¤¿¡£ Ìá¤êÃͤË0¤«Éé¿ô¤«Àµ¿ô¤òÊÖ¤»¤Ð¤¤¤¤¤È¤¤¤¦¤È¤³¤í¤òÍý²ò¤·¤Æ¤ª¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£ ñ¤Ëret¤Ë·×»»·ë²Ì¤òÆþ¤ì¤¿¤é¤¤¤¤¤È»×¤Ã¤Æ¤¤¤Þ¤·¤¿¡£ ¤½¤Î·ë²Ìdouble·¿¤Î·×»»·ë²Ì¤¬int·¿ret¤ËÆþ¤Ã¤Æ¤·¤Þ¤¦¤È¤¤¤¦¼ÁÌä¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤·¤¿¡£¿½¤·Ìõ¤´¤¶¤¤¤Þ¤»¤ó¡£ ÀµÄ¾ËܤòÆÉ¤ó¤Ç¤â¤Þ¤À¤ï¤«¤Ã¤Æ¤¤¤Ê¤¤¤È¤³¤í¤¬¤¢¤ê¤Þ¤¹¡£ >const strTestData *value1 = (const strTestData *)area1; ()¤Î¤¢¤ë¤Ê¤·¤Ç°ÕÌ£¤¬ÊѤï¤Ã¤Æ¤¯¤ë¤È»×¤¤¤Þ¤¹¡£ º¸ÊդϽñ¤´¹¤¨¤é¤ì¤Ê¤¤¹½Â¤ÂÎstrTestData¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤¬value1¡Ä ¹½Â¤ÂÎstrTestData¤Î½ñ¤´¹¤¨¤é¤ì¤Ê¤¤¥Ý¥¤¥ó¥¿¤¬value1¤¬Àµ¤·¤¤¤«¡Ä º¬µ¤¤è¤¯ÊÙ¶¯¤·¤Æ¿È¤Ë¤Ä¤¯¤è¤¦¤Ë¤·¤Þ¤¹¡Ê´À¡Ë ># ¤³¤ÎÊÕ¤ê¤ò¡¢¿ô³ØÅª¤Ë¹Í¤¨¤Æ¤ß¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£ ¤½¤¦¤Ç¤¹¤Í¡£¼ÂºÝ¿ôÃͤòÆþ¤ì¤Æ¥±¡¼¥¹¥Ð¥¤¥±¡¼¥¹¤ÇÅö¤Æ¤Ï¤á¤Æ¹Í¤¨¤ë¤È ¤Ê¤¼¤¦¤Þ¤¯¤¤¤¯¤Î¤«¤¬¸«¤¨¤Æ¤¤Þ¤¹¡£Å¬Àڤʽõ¸À¤ò¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ ¤«¤º¤ÞÅ >i = 2000000000, j = -2000000000, k = i - j ¤Î¾ì¹ç¡¢ >i > j ¤Ç¤¹¤¬¡¢k ¤¬Àµ¤Ë¤Ê¤ë¤È¤Ï¸Â¤ê¤Þ¤»¤ó¡£ ¤³¤ì¤Ïint·¿¤¬°·¤¨¤ëÃͤÎÈϰϤòͤ¨¤Æ¤·¤Þ¤¦¤«¤é¤È¤¤¤¦¤³¤È¤ÇÍý²ò¤·¤Æ ¤è¤í¤·¤¤¤Ç¤·¤ç¤¦¤«¡£¤´»ØÅ¦¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ RAPTÅ >C¸À¸ì¤Ç¤Ï¼°¤¬¿¿¤Î¤È¤ 1¡¢µ¶¤Î¤È¤ 0 ¤È¤Ê¤ë»ÅÍͤǤ¢¤ë¤³¤È¤È >3¹à±é»»»Ò¤ò»È¤¨¤Ð¡¢¤³¤ó¤Ê¤³¤È¤â¡£ ¥¢¥É¥Ð¥¤¥¹¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£»ä¤¬»ý¤Ã¤Æ¤¤¤ëËܤˤâÀâÌÀ¤¬ºÜ¤Ã¤Æ¤¢¤ê¤Þ¤·¤¿¡£¤´»ØÅ¦¤¤¤¿¤À¤¤¤Æ½é¤á¤Æ»È¤¤Æ»¤¬¤ï¤«¤ê¤Þ¤·¤¿¡£ ÆþÌç½ñ¤¬¤ï¤«¤ëÄøÅ٤ˤϤʤäƤ¤Þ¤·¤¿¤¬¤¤¤í¤ó¤Ê¥×¥í¥°¥é¥àÎã¤ò¤ß¤ë¤È¤ï¤«¤é¤Ê¤¤¤³¤È¤À¤é¤±¤Ç¤¹¡£¡ÊÆþÌç½ñ¤È¤¤¤Ã¤Æ¤â¥«¡¼¥Ë¥Ï¥ó¡õ¥ê¥Ã¥Á¡¼¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£°ìÈÖ½é¤á¤ËÇã¤ï¤µ¤ì¤¿ËܤǤ¹¤¬ÂçȾ¤¬Ê¬¤«¤é¤Ê¤¤¤Ç¤¹¡£¡Ë °ì¤Ä°ì¤Ä¤·¤Ã¤¿¤«¤Ö¤é¤º¤Ë³Î¼Â¤Ë¤ª¤µ¤¨¤Æ¿È¤ËÉÕ¤±¤¿¤¤¤È»×¤¤¤Þ¤¹¡£ |
No.1931![]() |
Re:³§ÍÍ¥¢¥É¥Ð¥¤¥¹¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ Åê¹Æ¼Ô---RAPT(2004/06/05 01:31:36) |
||
gt;>const strTestData *value1 = (const strTestData *)area1; >()¤Î¤¢¤ë¤Ê¤·¤Ç°ÕÌ£¤¬ÊѤï¤Ã¤Æ¤¯¤ë¤È»×¤¤¤Þ¤¹¡£ (·¿Ì¾)ÊÑ¿ô ¤Ï¡¢¥¥ã¥¹¥È¤È¤¤¤¤¤Þ¤¹¡£ ()¤ò¤Ï¤º¤¹¤È¥³¥ó¥Ñ¥¤¥ë¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£ |
No.1960![]() |
¤Þ¤À¤Þ¤ÀÃΤé¤Ê¤¤¤³¤È¤À¤é¤±¤Ç¤¹¡£¤â¤·¤è¤í¤·¤±¤ì¤Ð»ä¤ÎÍý²òÉÔ¤ˤ´»ØÆ³¤¯¤À¤µ¤¤¡£ Åê¹Æ¼Ô---¥Ô¥è¥Ô¥è(2004/06/07 11:39:05) |
||
¤ªÀ¤Ïäˤʤê¤Þ¤¹¡£ RAPTÅ >(·¿Ì¾)ÊÑ¿ô ¤Ï¡¢¥¥ã¥¹¥È¤È¤¤¤¤¤Þ¤¹¡£ >()¤ò¤Ï¤º¤¹¤È¥³¥ó¥Ñ¥¤¥ë¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£ ¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£ °ÊÁ°nopŤˤ´»ØÆ³¤·¤Æ¤¤¤¿¤À¤¤¤¿ºÝ¤Ë¡Ö¥¥ã¥¹¥È¡×¤È ¤´ÀâÌÀ¤·¤Æ¤¤¤¿¤À¤¤¤Æ¤ª¤ê¤Þ¤·¤¿¡£»ä¤ÎÉÔÃí°Õ¤Ç¤¹¡£ ¤µ¤Æ¡¢¥¥ã¥¹¥È¤Î»È¤¤Êý¤Ë¤Ä¤¤¤ÆÄ´¤Ù¤Æ¤¤¤Þ¤¹¡£ Î㤨¤Ð int a ; double b = 1.23; a = (int)b; ¤À¤Èdouble·¿b¤òint·¿¤Ë¥¥ã¥¹¥È¤·¤Æa¤ËÆþ¤ì¤ë¤È¤¤¤¦¤³¤È¤ÏÍý²ò¤·¤Æ¤¤¤Þ¤¹¡£ º£²ó»ä¤¬Íý²ò¤Ç¤¤Æ¤¤¤Ê¤¤Éôʬ¤ËÆþ¤ê¤Þ¤¹¡£ °ÊÁ°nopŤ˶µ¤¨¤Æ¤¤¤¿¤À¤¤¤¿¥×¥í¥°¥é¥à¤òÈ´¿è¤·¤Þ¤¹¤È >int compare( const void *area1, const void *area2 ) >{ > const strTestData *value1 = (const strTestData *)area1; > const strTestData *value2 = (const strTestData *)area2; ¤Ë¤Ê¤ê¡¢¤Þ¤¿ >Èæ³Ó´Ø¿ô¤Ï¡¢qsort()ÆâÉô¤ÇÍ×ÁǤÎÈæ³Ó¤¬¤¢¤ë»þ¤Ë¸Æ¤Ð¤ì¤Þ¤¹¡£ >¤½¤ÎºÝ¡¢Èæ³Ó¤¹¤ëÆó¤Ä¤ÎÍ×ÁǤÎÎΰè¤ÎÀèÆ¬¥Ý¥¤¥ó¥¿Ãͤò°ú¿ô¤È¤·¤ÆÅϤ·¤Þ¤¹¡£ >Èæ³Ó´Ø¿ôÆâ¤Ç¤Ï¡¢¤³¤Î¥Ý¥¤¥ó¥¿¤òŬÀڤʷ¿¤Ë¥¥ã¥¹¥È¤ÇÅö¤Æ¤Ï¤á¡¢ >Æó¤Ä¤ÎÍ×ÁǤÎÈæ³Ó·ë²Ì¤òÊÖ¤·¤Þ¤¹¡£ ¤È¶µ¤¨¤Æ¤¤¤¿¤À¤¤Þ¤·¤¿¡£ nopŤθÀÍÕ¤ò¤ª¼Ú¤ê¤·¤Æ¡¢Åö¤Æ¤Ï¤á¤Æ¹Í¤¨¤Þ¤¹¤È ¡¡ÚÈæ³Ó¤¹¤ëÆó¤Ä¤ÎÍ×ÁǤÎÎΰè¤ÎÀèÆ¬¥Ý¥¤¥ó¥¿Ãͤò°ú¿ô¤È¤·¤ÆÅϤ·¤Þ¤¹¡£¡Û °ú¿ô¤Ê¤Î¤Çint compare(¡Ë¤Î¡Ê¡ËÆâ¤ò»Ø¤¹¤³¤È¤«¤éÈæ³Ó¤¹¤ëÆó¤Ä¤ÎÍ×ÁÇ¤Ï const void *area1,const void *area2 ¤È¤Ê¤ë¡£ÀèÆ¬¥Ý¥¤¥ó¥¿Ãͤò°·¤¦¤¿¤áarea1,area2¤È¤¤¤¦ÃÍ¤Ë const void * ¤òÉÕ¤±¤ë¡£¡Êµ¡Ë ¡Ö¥Ý¥¤¥ó¥¿Ã͡סÊ*¤¬ÉÕ¤¤¤Æ¤¤¤ë¤³¤È¡Ë¤«¤é°ú¿ô¤Ï Í×ÁÇarea1,area2¤Î¥¢¥É¥ì¥¹Ãͤò»Ø¤·¤Æ¤¤¤ë¡£ ¢¡ÚÈæ³Ó´Ø¿ôÆâ¤Ç¤Ï¡¢¤³¤Î¥Ý¥¤¥ó¥¿¤òŬÀڤʷ¿¤Ë¥¥ã¥¹¥È¤ÇÅö¤Æ¤Ï¤á¡¢¡Û (const strTestData *)area1; (const strTestData *)area2; ¤³¤³¤ò»Ø¤·¤Æ¤¤¤ë¤È»×¤¤¤Þ¤¹¡£¤³¤³¤Î²ò¼á¤¬¤Þ¤À¤Ç¤¤Æ¤ª¤ê¤Þ¤»¤ó¡£ ¡Ê ¡Ë¤Ï¥¥ã¥¹¥È¤Ç¤¹¤Í¡£ ¤Þ¤ºconst void *area1¤ò°ú¿ô¤È¤·¡¢¥¢¥É¥ì¥¹ÃͤǴؿô¤Ë¼è¤ê¹þ¤ó¤À¸å area1¤ÎÃ͡ʥ¢¥É¥ì¥¹¤ÎÃæ¿È¡Ë¤ò¹½Â¤ÂÎstrTestData¤Î¥Ý¥¤¥ó¥¿¤ÇÊá¤é¤¨¤Æ¤¤¤ë¡£ ¤Ä¤Þ¤ê¹½Â¤ÂÎstrTestData¤Î¥Ý¥¤¥ó¥¿·¿¤òarea1¤Î·¿¤Ë¤·¤Æ¤¤¤ë¤È¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¤Ç¤·¤ç¤¦¤«¡© ¥¥ã¥¹¥È¤·¤¿area1¤Î¥Ý¥¤¥ó¥¿¤ò¹½Â¤ÂÎstrTestData¤Îvalue1¤Î¥Ý¥¤¥ó¥¿¤Ë ÂåÆþ¤·value1¤Èvalue2¤òÈæ³Ó¤¹¤ë¡© ¤È¤¹¤ë¤È¡¢¡ÚÆó¤Ä¤ÎÍ×ÁǤÎÈæ³Ó·ë²Ì¤òÊÖ¤·¤Þ¤¹¡£¡Û¤Î¡ÖÍ×ÁÇ¡×¤È ·ë¤Ó¤Ä¤¤¤Æ¤¤¤Ê¤¤¡Ä¤Ç¤¹¡£ ¤½¤â¤½¤â¥¥ã¥¹¥È¤Ë*¤¬¤Ä¤¤¤Æ¤¤¤ë¤³¤È¤Ç¸ÍÏǤäƤ¤¤Þ¤¹¡£ ¿Þ¤ò½ñ¤¯¤³¤È¤ò»î¤ß¤Æ¤¤¤Þ¤¹¤¬¾ð¤±¤Ê¤¤¤³¤È¤ËÍý²òÉÔ¤ǽñ¤±¤Þ¤»¤ó¡£ Ï䬰ï¤ì¤Æ¿½¤·Ìõ¤¢¤ê¤Þ¤»¤ó¤¬¡¢ ¡Êµ¡Ë¤Ê¤¼void¤òÉÕ¤±¤ë¤Î¤«¤â¤è¤¯¤ï¤«¤Ã¤Æ¤ª¤ê¤Þ¤»¤ó¡£ void¤Ï¶õ¤ò»Ø¤·¤Æ¤¤¤ë¤ÈÍý²ò¤·¤Æ¤ª¤ê¤Þ¤¹¡£ ÊÑ¿ô¤Ëvoid¤òÉÕ¤±¤ë³µÇ°¤¬º£¤Þ¤Ç»ä¤Ë¤Ê¤«¤Ã¤¿¤â¤Î¤Ç¤¹¤«¤é¡£ ¡ÖÀèÆ¬¥Ý¥¤¥ó¥¿Ã͡פò¥¡¼¥ï¡¼¥É¤ËÄ´¤Ù¤Æ¤ß¤Þ¤¹¡£ Íý²ò¤Î¿ÊĽ¶ñ¹ç¤ò¤Þ¤¿Åê¹Æ¤µ¤»¤Æ¤¤¤¿¤À¤¤¿¤¯»×¤¤¤Þ¤¹¡£ »ä¤¬´Ö°ã¤Ã¤¿Êý¸þ¤ÇÍý²ò¤·¤Æ¤ª¤ê¤Þ¤·¤¿¤é ÂçÊѶ²½Ì¤Ç¤¹¤¬¤´»ØÅ¦¤·¤Æ¤¤¤¿¤À¤¤¤Æ¤â¤è¤í¤·¤¤¤Ç¤·¤ç¤¦¤«¡£ ¤è¤í¤·¤¯¤ª´ê¤¤Ãפ·¤Þ¤¹¡£ |
No.1973![]() |
Re:¤Þ¤À¤Þ¤ÀÃΤé¤Ê¤¤¤³¤È¤À¤é¤±¤Ç¤¹¡£¤â¤·¤è¤í¤·¤±¤ì¤Ð»ä¤ÎÍý²òÉÔ¤ˤ´»ØÆ³¤¯¤À¤µ¤¤¡£ Åê¹Æ¼Ô---RAPT(2004/06/07 20:23:43) |
||
¤Ê¤ó¤«¡¢ÌÇÃã¶ìÃã¤Ë´ª°ã¤¤¤·¤Æ¤Þ¤¹¤Í¡£ ¢£Èæ³Ó´Ø¿ô¤Î°ú¿ô¡¢(const void *) ·¿¤Ë¤Ä¤¤¤Æ ¤³¤³¤Ç¤Î (const void *) ¤¢¤é¤æ¤ë·¿¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò°ú¿ô¤È¤·¤Æ¼õ¤±¼è¤ë »ö¤¬¤Ç¤¤ë¤È¤¤¤¦¤³¤È¤ò°ÕÌ£¤·¤Æ¤¤¤Þ¤¹¡£ ¼õ¤±¼è¤ë¤Î¤Ï (const int *) ¤Ç¤â¹½¤¤¤Þ¤»¤ó¤·¡¢(const char *) ¤Ç¤â ¹½¤¤¤Þ¤»¤ó¤·¡¢(const struct hogehoge *) ¤Ç¤â¹½¤¤¤Þ¤»¤ó¡£ void ¤Ï¤¹¤Ù¤Æ¤Î·¿¤òµÛ¼ý¤Ç¤¤Þ¤¹¡£ ¤Ç¡¢¼õ¤±¼è¤Ã¤¿Êý¤Ç¤¹¤¬¡¢¤½¤Î¤Þ¤Þ¤Ç¤Ï·¿¾ðÊ󤬤ʤ¤¤¿¤á¡¢Ç¤°Õ¤Î·¿¤Ë ¥¥ã¥¹¥È¤·¤Æ¤ä¤ë¤³¤È¤ÇÍøÍѲÄǽ¤Ë¤Ê¤ê¤Þ¤¹¡£ int fn(const void *x, const void *y); ¤È¤¹¤ë¤³¤È¤Ç¡¢²¼µ¤Î¤è¤¦¤Ê¤É¤ó¤Ê·¿¤Ç¤âÂбþ²Äǽ¤Ê¤Î¤Ç¤¹¡£ int compare_int(const void *x, const void *y) { const int *a = (const int *)x; const int *b = (const int *)y; return (*a < *b)?(-1):(*a > *b); } int compare_char(const void *x, const void *y) { const char *a = (const char *)x; const char *b = (const char *)y; return (*a < *b)?(-1):(*a > *b); } ¢¨Î㤨¤Ð¡¢Æ°Åª¤Ë¥á¥â¥ê¤ò³ÎÊݤ¹¤ë´Ø¿ô¤Ë malloc() ¤¬¤¢¤ê¤Þ¤¹¤¬¡¢ ¤³¤Î´Ø¿ô¤Î¥×¥í¥È¥¿¥¤¥×¤Ï void *malloc(size_t n); ¤Ç¤¢¤ê¡¢ char *p; p = (char *)malloc(10); ¤È¤¹¤ë¤³¤È¤Ç¡¢char q[10]; ¤È¤¹¤ë¤Î¤È¤Û¤ÜƱÅù¤Î¤³¤È¤¬¤Ç¤¤Þ¤¹¡£ ¤³¤ì¤â¡¢malloc()¤¬ÊÖ¤·¤¿¤â¤Î¤òǤ°Õ¤Î·¿¤È¤·¤ÆÍøÍѤ·¤¿°ìÎã¤Ç¤¹¡£ ¢£qsort()¤ÈÈæ³Ó´Ø¿ô¤Ë¤Ä¤¤¤Æ ¡ÚÈæ³Ó¤¹¤ëÆó¤Ä¤ÎÍ×ÁǤÎÎΰè¤ÎÀèÆ¬¥Ý¥¤¥ó¥¿Ãͤò°ú¿ô¤È¤·¤ÆÅϤ·¤Þ¤¹¡£¡Û ¡ÖÀèÆ¬¥Ý¥¤¥ó¥¿¡×¤ò°ú¤ÅϤ·¤Æ¤¤¤ë¤Î¤Ï¡¢qsort() ¤ËÂФ·¤Æ¤Ç¤¢¤ê¡¢ Èæ³Ó´Ø¿ô¤ËÂФ·¤Æ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£ qsort() ¤Ï¡¢°ú¿ô¤È¤·¤Æ¼õ¤±¼è¤Ã¤¿ÇÛÎó¤Î¸Ä¡¹¤ÎÍ×ÁǤò¥¢¥É¥ì¥¹ÅϤ·¤Ç Èæ³Ó´Ø¿ô¤ËÅϤ·¤Þ¤¹¡£ ¤½¤¦¡¢Èæ³Ó´Ø¿ô¤¬¼õ¤±¼è¤ë¥Ý¥¤¥ó¥¿¤Ï¡¢qsort() ¤ÇÅϤ·¤¿ ÈïÈæ³ÓÇÛÎó¤ÎÍ×ÁǤÀ¤Ã¤¿¤Î¤Ç¤¹¡ª Î㤨¤Ð¡¢ int array[] = {1,7,3,5,9,8,4,2,0,6}; size_t num = sizeof array / sizeof array[0]; size_t width = sizeof array[0]; qsort(array, num, width, compare); ¤È¤¢¤Ã¤¿¤È¤¡¢ int ret = compare(&array[0], &array[1]); Åù¤ÈÆâÉô¤Ç¸Æ¤Ð¤ì¤Þ¤¹¡£¤³¤³¤Ç¡¢array[0], array[1] ¤Ï¤½¤ì¤¾¤ìint·¿¤Ç ¤¢¤ê¡¢¥¢¥É¥ì¥¹±é»»»Ò & ¤òÉղä·¤¿ &array[0] ¤Ï (int *) ·¿ ¤Ë¤Ê¤ê¤Þ¤¹¡£ ¤³¤ì¤òÈæ³Ó´Ø¿ô¤Ï (const void *) ·¿¤Ç¼õ¤±¼è¤Ã¤Æ¤¤¤Þ¤¹¡£ ²¿ÅÙ¤â½ñ¤¤Þ¤¹¤¬¡¢(const void *) ·¿¤Ï¤¢¤é¤æ¤ë·¿¤ò¼õ¤±¼è¤ì¤ë¤Î¤Ç¤¹¡£ ¢£¼êÈ´¤¥µ¥ó¥×¥ë(^^; #include <stdio.h> #include <stdlib.h> int compare(const void *a, const void *b) { return *(const int *)a < *(const int *)b ? -1 : *(const int *)a > *(const int *)b; } int main() { int array[] = {1,7,3,5,9,8,4,2,0,6}; size_t i, num = sizeof array / sizeof array[0]; size_t width = sizeof array[0]; puts("before:"); for(i = 0; i < num; i++){ printf("%d ", array[i]); } qsort(array, num, width, compare); puts("\nafter:"); for(i = 0; i < num; i++){ printf("%d ", array[i]); } return 0; } |
No.1985![]() |
Re:¤Þ¤À¤Þ¤ÀÃΤé¤Ê¤¤¤³¤È¤À¤é¤±¤Ç¤¹¡£¤â¤·¤è¤í¤·¤±¤ì¤Ð»ä¤ÎÍý²òÉÔ¤ˤ´»ØÆ³¤¯¤À¤µ¤¤¡£ Åê¹Æ¼Ô---NykR(2004/06/09 21:21:14) |
||
(1)¡ÚÈæ³Ó¤¹¤ëÆó¤Ä¤ÎÍ×ÁǤÎÎΰè¤ÎÀèÆ¬¥Ý¥¤¥ó¥¿Ãͤò°ú¿ô¤È¤·¤ÆÅϤ·¤Þ¤¹¡£¡Û (°úÍÑÃæ¡¢µ¡¼ï°Í¸ʸ»ú¤ÏÊѹ¹¤·¤Þ¤·¤¿) (2)¡ÚÈæ³Ó´Ø¿ôÆâ¤Ç¤Ï¡¢¤³¤Î¥Ý¥¤¥ó¥¿¤òŬÀڤʷ¿¤Ë¥¥ã¥¹¥È¤ÇÅö¤Æ¤Ï¤á¡¢¡Û void·¿¤Ï¡¢¥µ¥¤¥º¤ò³ÎÄꤹ¤ë¤³¤È¤¬½ÐÍè¤Þ¤»¤ó¡£½¾¤Ã¤Æ¡¢Ãͤò¼è¤ê½Ð¤¹¤³¤È¤â³ÊǼ¤¹¤ë¤³¤È¤â½ÐÍè¤Þ¤»¤ó¡£¤Ç¤¹¤«¤é¡¢const void¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ëarea1¤äarea2¤ò¤½¤Î¤Þ¤Þ´ÖÀÜ»²¾È(¤È¤¤¤¦¤Î¤Ï¥Ý¥¤¥ó¥¿¤Ëñ¹à*±é»»»Ò¤òŬÍѤ¹¤ë¤³¤È¤Ç¤¹¡¢Ç°¤Î¤¿¤á)¤·¤Æ¤â²¿¤â½ÐÍè¤Þ¤»¤ó¡£ ¤·¤«¤·¡¢¤³¤ì¤é¤Î¥Ý¥¤¥ó¥¿¤Ï¼ÂºÝ¤Ë¤ÏÇÛÎó¤ÎÍ×ÁǤò»Ø¤·¤Æ¤¤¤ë¤ï¤±¤Ç¤¹¤«¤é¡¢¡ÈÍ×ÁǤؤΥݥ¤¥ó¥¿¡É¤Ë·¿ÊÑ´¹¤·¤Æ¤«¤é´ÖÀÜ»²¾È¤¹¤ì¤Ð¡¢Í×ÁǤÎÃͤò¼è¤ê½Ð¤·¤¿¤ê¡¢Í×ÁǤËÃͤò³ÊǼ¤·¤¿¤ê½ÐÍè¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£ ¤Ç¤â¡¢Èæ³Ó´Ø¿ôÆâ¤Ç¡¢Í×ÁǤËÃͤò¡Ö³ÊǼ¡×¤µ¤ì¤¿¤ê¤·¤Æ¤ÏÌÂÏǤʤΤÇconst¤òÉÕ¤±¤Æ¤½¤ì¤òËɻߤ·¤Æ¤¤¤ë¤Î¤Ç¤¹¡£const½¤¾þ¤µ¤ì¤¿ÊÑ¿ô¤Ï¡¢ÃͤòÊѹ¹¤Ç¤¤Þ¤»¤ó¤È¤¤¤¦¤ï¤±¡Ê¡©¡Ë¤ÇÈÆÍѤΥ½¡¼¥È´Ø¿ô¤Î¥µ¥ó¥×¥ë¡£ #include <stdio.h> #define N_ELEMENTS(arr) (sizeof(arr)/sizeof(arr[0])) #define BLOCK(statements) if(1){statements}else do;while(0) #define SWAP_T(T, o1, o2) BLOCK(T _w=(o1);(o1)=(o2);(o2)=_w;) static void st_swap(void * p1, void * p2, size_t size) { int i; for (i = 0; i < size; i++) { SWAP_T(char, ((char*)p1)[i], ((char*)p2)[i]); } } static void * st_minimum_element( void * begin, void * end, size_t size, int(*compar)(const void*,const void*) ) { char *minimum_p = begin, *cursor = begin; for ( ; cursor != end; cursor += size) { if (compar(cursor, minimum_p) < 0) { minimum_p = cursor; } } return minimum_p; } void selection_sort( void * base, size_t nmemb, size_t size, int(*compar)(const void*,const void*) ) { char *cursor; char *end = &((char*)base)[nmemb*size]; for (cursor = base; cursor != end; cursor += size) { st_swap(cursor, st_minimum_element(cursor, end, size, compar), size); } } // ¤³¤³¤«¤é»ÈÍÑÎã static int st_compare_double(const void * key, const void * element) { const double *k = key, *e = element; return (*k > *e) - (*k < *e); } void print_array_double (double * array, size_t nmemb) { int i; for (i = 0; i < nmemb; i++) { printf ("%s%g", i ? ", " : " [", array[i]); } puts ("]"); } int main (void) { double name[] = { 1.0, 5.2, 3.45, 0.002, 12.58, 4.23, 89.65, 0.25, 20.11, }; printf("before "); print_array_double(name, N_ELEMENTS(name)); selection_sort(name, N_ELEMENTS(name), sizeof(double), st_compare_double); printf("after "); print_array_double(name, N_ELEMENTS(name)); return 0; } |