Δημοσιεύτηκε: 23 Μαρ 2012, 21:16
από migf1
@Σταματίου: Σου έγραψα τον κώδικα για να τον συγκρίνεις με τον δικό σου.

Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>

#define MAXELEMS 9
#define MAXINPUT (255+1)

#define ERR_INTERNAL(msg) \
printf( "*** %s(): %s\n", __func__, (msg) ? (msg) : "Internal error!" )

/* ----------------------------------------------------------- */
void arr_sort_insertion( int *arr, int nelems )
{
int j;

/* sanity check */
if ( !arr || nelems < 2 || nelems > MAXELEMS ) {
ERR_INTERNAL( "invalid array or invalid array length!" );
return;
}

/* do the sorting */
for(int i=1; i < nelems; i++)
{
int key = arr[i];
j = i-1;
while (key < arr[j] && j >=0 )
{
arr[ j+1 ] = arr[j];
j = j-1;
}
arr[ j+1 ] = key;
}

}
/* ----------------------------------------------------------- */
void arr_print( const int *arr, int nelems )
{
/* sanity check */
if ( !arr || nelems < 1 || nelems > MAXELEMS ) {
ERR_INTERNAL( "invalid array or invalid array length!" );
return;
}

/* do the printing */
for (int i=0; i < nelems; i++)
printf( "%d ", arr[i] );
putchar('\n');

return;
}
/* ----------------------------------------------------------- */
void arr_get_elements( int *arr, int nelems )
{
char input[ MAXINPUT ] = {'\0'};

/* sanity check */
if ( !arr || nelems < 1 || nelems > MAXELEMS ) {
ERR_INTERNAL( "invalid array or invalid array length!" );
return;
}

for (int i=0; i < nelems; i++ ) {
printf( "Element #%d: ", i );
fgets( input, MAXINPUT, stdin );
arr[i] = atoi(input);
}

return;
}

/* ----------------------------------------------------------- */
int asklength( void )
{
int ret = 0;
char input[ MAXINPUT ] = {'\0'};

printf( "Give array length (2 - %d): ", MAXELEMS );
fgets( input, MAXINPUT, stdin );
ret = atoi(input);

return ret < 2 || ret > MAXELEMS ? 0 : ret;
}
/* ----------------------------------------------------------- */
int main( void )
{
// int array[ MAXELEMS ] = {2,4,6,8,9,1,5,3,7};
int *array = NULL;
int nelems;

/* get length from user */
while ( 0 == (nelems = asklength()) )
; /* void */

/* create the array */
if ( NULL == (array = calloc(nelems, sizeof(int)) ) ) {
ERR_INTERNAL("out of memory!");
exit( EXIT_FAILURE );
}

/* fill-in the array from the user & print it */
arr_get_elements( array, nelems );
arr_print( array, nelems );

/* sort the array & print it */
arr_sort_insertion( array, nelems );
arr_print( array, nelems );

free( array );

system("pause"); /* windows only */
exit( EXIT_SUCCESS );
}

ΥΓ. Ο αλγόριθμός σου με την insertion-sort δεν δούλευε σωστά, τον αντικατέστησα με έναν που βρήκα έτοιμο στο νετ.