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