선택정렬 알고리즘 질문입니다.
글쓴이: nayana / 작성시간: 금, 2004/04/23 - 4:06오후
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
void select_sort( void *base, size_t nelem, size_t width, int ( *fcmp ) ( const void *, const void * ) );
int intcmp( const void *a, const void *b ) ;
int main( void )
{
char a_sort[N], random[N];
unsigned int i;
printf("입력하세요?\n");
scanf("%s", random );
strcpy( a_sort , random );
select_sort( a_sort, strlen( a_sort ), sizeof( char ), intcmp );
for( i = 0; i < strlen( random ) ; i++ )
printf( "(%d)\t %c\n", i + 1, a_sort[i] );
return 0;
}
void select_sort( void *base, size_t nelem, size_t width, int ( *fcmp ) ( const void *, const void * ) )
{
void *min;
int minindex;
unsigned int i, j;
min = malloc( width );
for ( i = 0; i < nelem - 1 ; i++ )
{
minindex = i; //start
memcpy( min, (char *)base + i * width, width ); /* min = a[i] */
for ( j = i + 1; j < nelem ; j++ )
{
if ( fcmp( min, (char *)base + j * width ) > 0 ) /* if (min > a[j]) */
{
memcpy( min, (char *)base + j * width, width ); /* min = a[j] */
minindex = j;
}
}
memcpy( (char *) base + minindex * width, (char *)base + i * width, width );
// a[minindex] = a[i]
memcpy( (char *)base + i * width, min, width );
// a[minindex] = min
}
free( min );
}
int intcmp( const void *a, const void *b )
{
return ( *(int *)a - *(int *)b );
}
abcde 라고 입력하면 eabcd
edcba 라고 입력하면 aedcb 라고 나옵니다.
어디가 잘못된것인지?
Forums:


맨아래 intcmp 라는 함수에서 char 를 int 로 casting
맨아래 intcmp 라는 함수에서 char 를 int 로 casting 하여서 문제가 생기는 군요.
프로그램이 뭔가 int sorting 하는녀석을 char 로 고치느라 짬뽕된게 -_- 보이는 듯 합니다.
일단 맨 마지막에 *(int *) 이 내용을 *(char *) 로 고치시면 원하시는 부분은
소팅이 되겠네요
Neogeo - Future is Now.
댓글 달기