C¸À¸ì´Ø·¸·Ç¼¨ÈÄ

²áµî¥í¥°

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)¡ÚÈæ³Ó¤¹¤ëÆó¤Ä¤ÎÍ×ÁǤÎÎΰè¤ÎÀèÆ¬¥Ý¥¤¥ó¥¿Ãͤò°ú¿ô¤È¤·¤ÆÅϤ·¤Þ¤¹¡£¡Û
°ú¿ô¤Ê¤Î¤Çint compare(¡Ë¤Î¡Ê¡ËÆâ¤ò»Ø¤¹¤³¤È¤«¤éÈæ³Ó¤¹¤ëÆó¤Ä¤ÎÍ×ÁǤÏ
const void *area1,const void *area2
¤È¤Ê¤ë¡£ÀèÆ¬¥Ý¥¤¥ó¥¿Ãͤò°·¤¦¤¿¤áarea1,area2¤È¤¤¤¦ÃͤË
const void *
¤òÉÕ¤±¤ë¡£¡ÊI¡Ë
¡Ö¥Ý¥¤¥ó¥¿Ã͡סÊ*¤¬ÉÕ¤¤¤Æ¤¤¤ë¤³¤È¡Ë¤«¤é°ú¿ô¤Ï
Í×ÁÇarea1,area2¤Î¥¢¥É¥ì¥¹Ãͤò»Ø¤·¤Æ¤¤¤ë¡£

(°úÍÑÃæ¡¢µ¡¼ï°Í¸ʸ»ú¤ÏÊѹ¹¤·¤Þ¤·¤¿)
Èæ³Ó´Ø¿ô¤Ë¤Ï¡ÈÍ×ÁǤؤΥݥ¤¥ó¥¿(¤òconst void*·¿¤ËÊÑ´¹¤·¤¿¤â¤Î)¡É¤¬¤ï¤¿¤µ¤ì¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢²¾°ú¿ôarea1,area2¤â¡ÖÍ×ÁǡפǤϤʤ¯Í×ÁǤؤΥݥ¤¥ó¥¿¤òÊÝ»ý¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
¤è¤Ã¤Æ¡¢Èæ³Ó´Ø¿ô¤Ïarea1,area2¤ò¡ÈÍ×ÁǤؤΥݥ¤¥ó¥¿(¤òconst void*·¿¤ËÊÑ´¹¤·¤¿¤â¤Î)¡É¤È¤·¤Æ¼è¤ê°·¤ï¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£


(2)¡ÚÈæ³Ó´Ø¿ôÆâ¤Ç¤Ï¡¢¤³¤Î¥Ý¥¤¥ó¥¿¤òŬÀڤʷ¿¤Ë¥­¥ã¥¹¥È¤ÇÅö¤Æ¤Ï¤á¡¢¡Û
(const strTestData *)area1;
(const strTestData *)area2;
¤³¤³¤ò»Ø¤·¤Æ¤¤¤ë¤È»×¤¤¤Þ¤¹¡£¤³¤³¤Î²ò¼á¤¬¤Þ¤À¤Ç¤­¤Æ¤ª¤ê¤Þ¤»¤ó¡£

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;
}