Tassos icon

Αναδιάταξη με ένα "πέρασμα" του πίνακα.

Tassos | PRO | 05/02/14 08:48:42 PM UTC | 0 ⭐ | 386 👁️ | Never ⏰ | []
C |

3.84 KB

|

None

|

0 👍

/

0 👎

{                                  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