Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πως ταξινομουμε σε c ενα struct(x,y) ;;;

Îåêßíçóå áðü ôï ìÝëïò tommaσ. Τελευταία δημοσίευση από το μέλος nikos123 στις 09-03-2009, 12:47. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  15-02-2009, 18:04 48442

    Πως ταξινομουμε σε c ενα struct(x,y) ;;;

    για σας

    Εχω ενα struct σαν το κατω

    struct point1
    {
        int x;
        int y;
    };

    και φτιαχνω ενα struct point A[1000] . Πως μπορω να το ταξινομησω ως πρως x  μεσω της qsort απο την βιβλιοθηκη stdlib.h[ή με αλλο αντιστιχο γρηγορο τροπο...];;;Φυσικα θα πρεπει οταν αλλαζει ενα χ , να αλλαζει και το αντιστηχο ψ θεση , καθοτι το struct αντιπροσωπευει καρτεσιανα σημεια....

  •  16-02-2009, 10:00 48464 σε απάντηση της 48442

    Απ: Πως ταξινομουμε σε c ενα struct(x,y) ;;;

    Αυτό είναι κάτι σαν bubblesort (αν θυμάμαι καλά...Stick out tongue)

    struct point1 tmp;

    for (i = 0; i < N; i++)
        for (j=N-1; j > i; j--)
            if (A[j].x < A[j-1].x)
           {
                tmp = A[j];
               A[j] = A[j-1];
               A[j-1] = tmp;
           }

    Οπότε, μπορείς να κάνεις κάτι αντίστοιχο σε quick sort.

  •  16-02-2009, 12:53 48467 σε απάντηση της 48442

    Απ: Πως ταξινομουμε σε c ενα struct(x,y) ;;;

    Quick n' dirty:

    Φτιάξε ένα δεύτερο array  με τα x μόνο. Ταξινόμησέ το και ύστερα κάνε rearrange τα (x,y) σου με βάση την ταξινόμηση του x. Αυτό θα δουλεύψει μόνο αν δεν χρειάζεσαι δευτερεύουσα ταξινόμηση και ως προς y.


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  16-02-2009, 22:29 48487 σε απάντηση της 48442

    Απ: Πως ταξινομουμε σε c ενα struct(x,y) ;;;

    Η ίδια η qsort μπορεί άνετα να ταξινομήσει οποιοδήποτε struct. Αν δείς το documentation της, η qsort δέχεται ως τέταρτη παράμετρο τη συνάρτηση που θα κάνει τη σύγκριση. Το μόνο που απαιτείται είναι να φτιάξεις αυτή τη συνάρτηση η οποία θα συγκρίνει τα point1.x


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  17-02-2009, 01:07 48489 σε απάντηση της 48487

    Απ: Πως ταξινομουμε σε c ενα struct(x,y) ;;;

    Είδες για να μην ξέρω c++Embarrassed; Υποπτεύομαι ότι λειτουργεί με τον ίδιο τρόπο με την Array.Sort Method (Array, IComparer). Ο Comparer ορίζεται από εσένα, οπότε μπορείς να κάνεις ταξινόμηση με πολλαπλά κριτήρια και όχι μόνο τα x. Αν δηλαδή τα x1 και x2 είναι ίσα, του λες να κοιτάξει τα y1 και y2. Cool...
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  18-02-2009, 16:48 48537 σε απάντηση της 48489

    Απ: Πως ταξινομουμε σε c ενα struct(x,y) ;;;

    ευχαρηστω ολους για την βοηθεια.

    Κυριε Μαρκο η συναρτηση ειναι στην βιβλιοθηκη της c(δες απο την stdlib.h)


    Τελικα βρηκα εναν αλλο αλγοριθμο που κανει την δουλεια μου(new ideas), ωστόσο ως μανιακος να γνωριζω τα παντα(φρικιο..mpou!) θελω να βρω και εδω τη λυση. Κυριε παναγιωτη(λογο διαφορα ηλικιας το λεω το "κυριε"... δεν τελειωσα το λυκειο ακομα) αυτο που πρωτα προσπαθησα ήταν αυτο που λες, ωστοσο δεν μου ηταν ιδιεαιτερα χρησιμο ειπειδη(μαλλον) δεν καταφερά(ή δεν ξερω) πως να γραψω μια συναρτηση που θα δεχεται εναν struct(το point στην περιπτωση μου) γιατι δεχεται σαν παραμετρο μονο δυο (
    const void *) πραγμα που δεν με βοηθησε
    να βρω πως θα του δειξω να συγκρηνη δυο point.x - point.x και να μεταθετη τα y αναλογα. Για αυτη την συναρτηση στην ουσια ζητησα βοηθεια, ωστοσο εκανα πιο γενικη την ερωτηση , επειδη ηθελα να ακουσω και εναλλακτικες λυσεις... Καμια ιδεα ;;


  •  18-02-2009, 17:08 48538 σε απάντηση της 48537

    Απ: Πως ταξινομουμε σε c ενα struct(x,y) ;;;

    Αν κοιτάξεις το sample που περιλαμβάνει το documentation της qsort θα δεις ότι τις παραμέτρους θα πρέπει να τις κάνεις cast στον τύπο που θες μέσα στην compare.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  09-03-2009, 12:47 49041 σε απάντηση της 48487

    Απ: Πως ταξινομουμε σε c ενα struct(x,y) ;;;

    H callback συναρτηση για δισδιαστατη ταξινομηση με την qsort :
     int qsort_compare( const void* arg1, const void* arg2 )
    {
      point1* p1 = (point1*) arg1;
      point1* p2 = (point1*) arg2;
      if(p1->x > p2->x) return 1;
      if(p1->x < p2->x) return -1;
      if(p1->y > p2->y) return 1;
      if(p1->y < p2->y) return -1;
      return 0;
    }

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems