선택정렬 알고리즘 질문입니다.
글쓴이: 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.
댓글 달기