Δημοσιεύτηκε: 23 Μαρ 2012, 19:51
stamatiou έγραψε:
Απλά για κάποιο λόγο δεν δουλεύει με δυναμική κατανομή :/
Τι σφάλματα ή/και προειδοποιήσεις σου βγάζει ο compiler; Επίσης, όταν λες δεν δουλεύει τι εννοείς; Κρασάρει; Δεν τυπώνει τίποτα; Τυπώνει αλλά είναι λάθος; ...
Από gdb το πέρασες;
Την παρακάτω υλοποίηση την έφτιαξα ώστε οι ρουτίνες _print και _sort να δουλεύουν ανεπηρέαστες από το αν το array θα οριστεί στατικά ή δυναμικά, και κάνει επίσης ελέγχους ώστε να μην κρασάρει. Δοκίμασε να τροποιήσεις αυτήν την έκδοση με δυναμικά δεσμευμένο array...
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
#include <stdio.h>
#include <stdlib.h>
#define MAXELEMS 9
#define ERR_INTERNAL() printf( "*** %s(): internal error!\n", __func__ )
/* ----------------------------------------------------------- */
void arr_sort_insertion( int *arr, int nelems )
{
int i,j, key;
/* sanity check */
if ( !arr || nelems < 2 || nelems > MAXELEMS ) {
ERR_INTERNAL();
return;
}
/* do the sorting */
for (j=2; j < nelems; j++)
{
i = j - 1;
key = arr[ j ];
while (i >= 0 && arr[i] > key) {
arr[ i+1 ] = arr[ i ];
i--;
}
arr[ i+1 ] = key;
}
}
/* ----------------------------------------------------------- */
void arr_print( const int *arr, int nelems )
{
/* sanity check */
if ( !arr || nelems > MAXELEMS ) {
ERR_INTERNAL();
return;
}
/* do the printing */
for (int i=0; i < nelems; i++)
printf( "%d", arr[i] );
putchar('\n');
return;
}
/* ----------------------------------------------------------- */
int main( void )
{
int array[ MAXELEMS ] = {2,4,6,8,9,1,5,3,7};
arr_print( array, MAXELEMS );
arr_sort_insertion( array, MAXELEMS );
arr_print( array, MAXELEMS );
system("pause"); /* windows only */
return 0;
}