{ Visit: http://g-lts.info/ for more code! }
#include <stdio.h>
#define Nmax 10
int rearrange(int pin[], int megethos);
/*Παίρνει :
- Έναν πίνακα πραγματικών
- Το Μέγεθος του πίνακα
Επιστρέφει :
Το πίνακα που παίρνει με αναδιάταξη στοιχείων, πρώτα οι αρνητικοί και έπειτα οι
Θετικοί, και όλα αυτά με ένα πέρασμα. :)
*/
int main (void)
{
int p[Nmax] = { 1, -2, 3, 4, 5 , -6, 7, 8, -9, -10}; /* εγώ για δοκιμές βάζω αυτές τις τιμές, για να μην πληκτρολογώ συνεχώς */
int i=0;
/* printf("Δώσε %d ακέραιους.\n",Nmax); */
/* Διάβασμα ακέραιων τιμών και εκχώρηση στις θέσεις του πίνακα */
/*for (i; i<Nmax; i++)
{
printf("%d : ",i);
scanf("%d",&p[i]);
}
*/
/* Ας εμφανίσω και τι έχει τώρα ο πίνακας μέσα για να είμαι σίγουρος.. */
i = 0;
for (i; i<Nmax; i++)
printf("Στην θέση %d ---> %d\n", i, p[i]);
rearrange(p,Nmax); /* Καλώ την συνάρτηση που θα αναδιάταξη τον πίνακα μου */
printf("\n\nH νέα αναδιάταξη του πίνακα μας είναι : \n");
i = 0;
for (i; i<Nmax; i++)
printf("Στην θέση %d ---> %d\n", i, p[i]);
return 0;
}
int rearrange(int pin[], int megethos)
{
int i = 1; /* Από το ΔΕΎΤΕΡΟ ΣΤΟΙΧΕΊΟ του πίνακα */
int swap;
int negative = 0; /* Η θέση negative είναι η θέση που περιμένει για να μπει η επόμενη αρνητική τιμή */
/* αρχικά η negative αρχίζει από την πρώτη (0 στην C) θέση ( γιατί θέλουμε ΣΤΗΝ ΑΡΧΉ τους αρνητικούς ) και κάθε φορά που βάζουμε κάτι σε αυτή αυξάνουμε
τον δείκτη - θέση - μεταβλητή negative,κατά 1 για να δείξει στην επόμενη κατά σειρά θέση που θα μπει ο επόμενος ΑΝ τύχει και βρούμε αρνητικός μας αριθμός */
/* Η θέση που δείχνει η negative είναι η θέση που μπορούμε να βάλουμε (αν βρεθεί) αρνητική τιμή. Θα είναι είτε μια θέση μετά δηλ. την εκχώρηση της τελευταίας
αρνητικής τιμής που βρέθηκε ή μετά αν είναι στην πρώτη θέση..... */
for (i; i<megethos; i++) /* Πάρε τον πίνακα από την αρχή μέχρι το τέλος */
{
if ( pin[i]<0 ) /* Αν τσιμπήσουμε ΑΡΝΗΤΙΚΌ */
{
swap = pin[i]; /* Πέτα τον αρνητικό που βρήκαμε στη ΘΈΣΗ i, σε ένα κουβά */
pin[i] = pin[negative]; /* Δώσε την τιμή που βρίσκεται στην ΘΈΣΗ negative* ,
στη θέση που βρίσκεται τώρα το i ( και άρα ο αρνητικός που βρήκαμε )
έτσι αντικαθιστούμε την αρνητική τιμή που βρήκαμε στην θέση negative */
pin[negative] = swap; /* Δώσε τον αρνητικό στην θέση που βρίσκεται η negative*/
negative++; /* Αύξησε στην επόμενη ΘΈΣΗ - +1 την μεταβλητή negative - του πίνακα για τον τυχόν επόμενο αρνητικό που θα βρούμε */
}
}
return 0;
}
{ Visit: http://g-lts.info/ for more code! }
Comments