Tassos

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

May 2nd, 2014
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.84 KB | None | 0 0
  1. {                                  Visit:   http://g-lts.info/  for more code!                            }
  2.  
  3. #include <stdio.h>
  4.  
  5. #define Nmax 10
  6.  
  7. int rearrange(int pin[], int megethos);
  8. /*Παίρνει :
  9.     - Έναν πίνακα πραγματικών
  10.     - Το Μέγεθος του πίνακα
  11. Επιστρέφει :
  12. Το πίνακα που παίρνει με αναδιάταξη στοιχείων, πρώτα οι αρνητικοί και έπειτα οι
  13. Θετικοί, και όλα αυτά με ένα πέρασμα. :)
  14. */
  15. int main (void)
  16. {
  17.  
  18. int p[Nmax] = { 1, -2, 3, 4, 5 , -6, 7, 8, -9, -10}; /* εγώ για δοκιμές βάζω αυτές τις τιμές, για να μην πληκτρολογώ συνεχώς */
  19. int i=0;
  20.  
  21. /* printf("Δώσε %d ακέραιους.\n",Nmax); */
  22.  
  23. /* Διάβασμα ακέραιων τιμών και εκχώρηση στις θέσεις του πίνακα */
  24. /*for (i; i<Nmax; i++)
  25.     {
  26.     printf("%d : ",i);
  27.     scanf("%d",&p[i]);
  28.     }
  29. */
  30.  
  31. /* Ας εμφανίσω και τι έχει τώρα ο πίνακας μέσα για να είμαι σίγουρος.. */
  32. i = 0;
  33. for (i; i<Nmax; i++)
  34.     printf("Στην θέση %d ---> %d\n", i, p[i]);
  35.  
  36. rearrange(p,Nmax); /* Καλώ την συνάρτηση που θα αναδιάταξη τον πίνακα μου */
  37.  
  38. printf("\n\nH νέα αναδιάταξη του πίνακα μας είναι : \n");
  39. i = 0;
  40. for (i; i<Nmax; i++)
  41.     printf("Στην θέση %d ---> %d\n", i, p[i]);
  42.  
  43. return 0;
  44. }
  45.  
  46. int rearrange(int pin[], int megethos)
  47. {
  48.  
  49. int i = 1; /* Από το ΔΕΎΤΕΡΟ ΣΤΟΙΧΕΊΟ του πίνακα */
  50. int swap;
  51. int negative = 0; /* Η θέση negative είναι η θέση που περιμένει για να μπει η επόμενη αρνητική τιμή */
  52. /* αρχικά η negative αρχίζει από την πρώτη (0 στην C) θέση ( γιατί θέλουμε ΣΤΗΝ ΑΡΧΉ τους αρνητικούς ) και κάθε φορά που βάζουμε κάτι σε αυτή αυξάνουμε
  53. τον δείκτη - θέση - μεταβλητή negative,κατά 1 για να δείξει στην επόμενη κατά σειρά θέση που θα μπει ο επόμενος ΑΝ τύχει και βρούμε αρνητικός μας αριθμός */
  54. /* Η θέση που δείχνει η negative είναι η θέση που μπορούμε να βάλουμε (αν βρεθεί) αρνητική τιμή. Θα είναι είτε μια θέση μετά δηλ. την εκχώρηση της τελευταίας
  55. αρνητικής τιμής που βρέθηκε ή μετά αν είναι στην πρώτη θέση.....  */
  56.  
  57. for (i; i<megethos; i++) /* Πάρε τον πίνακα από την αρχή μέχρι το τέλος */
  58.     {
  59.     if ( pin[i]<0 ) /* Αν τσιμπήσουμε ΑΡΝΗΤΙΚΌ */
  60.         {
  61.         swap = pin[i]; /* Πέτα τον αρνητικό που βρήκαμε στη ΘΈΣΗ i, σε ένα κουβά */
  62.         pin[i] = pin[negative]; /* Δώσε την τιμή που βρίσκεται στην ΘΈΣΗ negative* ,
  63.                     στη θέση που βρίσκεται τώρα το i ( και άρα ο αρνητικός που βρήκαμε )
  64.                     έτσι αντικαθιστούμε την αρνητική τιμή που βρήκαμε στην θέση negative */
  65.         pin[negative] = swap; /* Δώσε τον αρνητικό στην θέση που βρίσκεται η negative*/
  66.         negative++; /* Αύξησε στην επόμενη ΘΈΣΗ - +1 την μεταβλητή negative - του πίνακα για τον τυχόν επόμενο αρνητικό που θα βρούμε */
  67.         }
  68.    
  69.     }
  70.    
  71.  
  72. return 0;
  73. }
  74.  
  75.  
  76. {                                  Visit:   http://g-lts.info/  for more code!                            }
Advertisement
Add Comment
Please, Sign In to add comment