Koordinaten sortieren!



  • Hab 8 Punkte mit:
    1.x1,y1
    2.x2,y2
    3.x3,y3
    4.x4,y4
    5.x5,y5
    6.x6,y6
    7.x7,y7
    8.x8,y8

    Also wenn von den acht Punkte der y-Wert gleich mit einem anderen oder mehrere andere y-Werte gleich ist(sind), dann will ich den x-Wert sortieren, wobei der kleinste x-Wert oben sein soll.

    Beispiel:
    x1=23,y1=67
    x2=45,y2=67
    x3=38,y3=67

    Also hier sind die y-Werte gleich, die x-Werte sollen so sortiert werden:
    1.x1=23 (kleinste)
    2.x3=38
    3.x2=45 (grösste)



  • Wie kann ich das jetzt machen mit C????



  • Wie liegen die Koordinaten vor? struct?

    Um das nochmal klarzustellen: Du willst die y-Werte sortieren und im Falle von identischen y-Werten feiner nach x-Werten sortieren?

    Schau dir mal qsort() an.



  • Tim schrieb:

    Wie liegen die Koordinaten vor? struct?

    Genau!

    Tim schrieb:

    Um das nochmal klarzustellen: Du willst die y-Werte sortieren und im Falle von identischen y-Werten feiner nach x-Werten sortieren?

    Auch richtig!

    Tim schrieb:

    Schau dir mal qsort() an.

    Kannst du mir vielleicht ein Link posten?
    Wäre nett!
    Sonst danke DIR!



  • Sorry hatte zu spät den vorigen beitrag bemerkt...



  • Kuldren schrieb:

    naja zuerst solltest du dir übnerlegen was mit daten passiert die z.b. wie folgt aussehen:

    12,27
    23,78
    46,99
    65,27
    14,99

    daraus hättest du dann:
    12,27
    65,27
    46,99
    14,99
    23,78

    aber wie würdest du die ordnen?

    Habe ich vergessen zu sagen, die x und y-Werte sollen Ganzzahlen sein!



  • nein da hatte ich gemeint dass der erste wert vor dem beistrich x und danach y ist 😉

    wollte erfragen wie du das ganze gesamt ordnen willst
    hatte eben den vorigen beitrag zu spät gesehen...



  • Ahh ok!



  • Bonafide schrieb:

    Kannst du mir vielleicht ein Link posten?

    Klar doch: man: qsort



  • Kannst dir vlt auch Sortieren mittels Fachverteilung ansehen



  • Also hab nach qsort() gegoogelt, hab auch was gefunden, aber irgendwie verstehe ich das nicht!

    Kann man das auch anders sortieren???



  • Bonafide schrieb:

    Also hab nach qsort() gegoogelt, hab auch was gefunden, aber irgendwie verstehe ich das nicht!

    Naja, nach 16 Minuten ist es auch schwer qsort() zu verstehen.

    Bonafide schrieb:

    Kann man das auch anders sortieren???

    Sicher. Man kann seinen eigenen Sortieralgorithmus implementieren. Ob das einfacher oder schwerer für einen Anfänger ist kann ich aber nicht beurteilen. qsort() ist fertig und gut. Die Anwendung ist nicht trivial, aber lehrreich und sinnvoll. Andererseits wäre auch die Implementierung eines anderen Algorithmus lehrreich...



  • Tim schrieb:

    Bonafide schrieb:

    Also hab nach qsort() gegoogelt, hab auch was gefunden, aber irgendwie verstehe ich das nicht!

    Naja, nach 16 Minuten ist es auch schwer qsort() zu verstehen.

    Hast Recht hab mir wenig Zeit gelassen.

    Aber habe jetzt ein anderes Sortierungsverfahren ''gefunde'' und schon ein bishen verstanden. Ich rede über Bubblesort. Hab das auch bei meinem Fall ausprobiert aber komme nicht weiter, deshalb bitte wieder um HILFE
    Hier der Code(Beispiel):

    void bubble_sort(int *array, int elemente) {
       int i,temp;
    
       while(elemente--)
          for(i = 1; i <= elemente; i++)
             if(array[i-1] > array[i]) {
                temp=array[i];
                array[i]=array[i-1];
                array[i-1]=temp;
             }
    }
    
    int main(void){
    
        int Array_x[]={2,5,6,3,4,5,6,12};
        int Array_y[]={3,6,6,3,5,6,5,9};
        int elements_x=sizeof(Array_x)/sizeof(int);
        int elements_y=sizeof(Array_y)/sizeof(int);
        int i;
    
        bubble_sort(Array_y,elements_y);
       }
    

    Also hier sortiert er zwar die y-Werte, weiss aber nicht wo ich den Code umändern muss, damit er auch die x-Werte sortiert(wenn die y-Werte gleich sind).

    Helft mir Bitte!!!



  • Wo sind die Strukturen denn abgeblieben?



  • void bubble_sort(int *array
    

    Das kann ja auch nicht gehen, wenn du nur EIN array
    (x-Werte ODER y-Werte) sortierst. Dadurch würde der
    Zusammenhang der x- und y- Werte flöten gehen.

    Du brauchst eine andere Daten-Struktur

    struct {
      int x;
      int y;
    }
    

    und ein array dieser structs sortieren.

    Dein vergleich sieht dann so aus

    if (array[i].y > array[i+1].y ||
       (array[i].y == array[i+1].y && array[i].x > array[i+1].x)) {
      // austauschen
    }
    


  • Leroy42 schrieb:

    und ein array dieser structs sortieren.

    Dein vergleich sieht dann so aus

    if (array[i].y > array[i+1].y ||
       (array[i].y == array[i+1].y && array[i].x > array[i+1].x)) {
      // austauschen
    }
    

    Verstehe ich irgendwie nicht richtig. Könntest du mir das BITTE besser erklären?



  • Ich meine wie kann ich eine Struktur mit einem Array verbinden??



  • du solltest dir vlt nochmal n tutorial machen oder so

    eine struktur ist einfach ein von dir erstellter zusammengesetzter datentyp:

    struct myStructure{
       int id;
       char Name[128];
    };
    

    und du kannst somit auch arrays deines datentyps erstellen:

    myStructure array[10];
    

    Wie du das für deinen Algo machen musst musst du dir ausdenken

    z.b.:

    struct point{
       int x;
       int y;
    };
    
    point pointlist[10]; // 10 Punkte
    pointlist[0].x=5;    // weist dem x wert des ersten elements (also dem ersten Punkt) den wert 5 zu
    


  • Ist das denn richtig???
    Hier der Code:

    struct Point{
    int x;
    int y;
    };
    
    Point array[4];
         array[0].x=2 //Zum Beispiel
         array[0].y=1
    
         array[1].x=4
         array[1].y=1
    
         array[2].x=123
         array[2].y=4
    
         array[3].x=12
         array[3].y=1
    
         int i,j;
         int temp;
         int temp1;
         int N=4;
    
         while(N--)
         for(i=0;i<=4;i++){
                          if(array[i].y>array[i+1].y){
                                                      temp=array[i+1].y;
                                                      array[i+1].y=array[i].y;
                                                      array[i].y=temp;
                                                      }
                          if(array[i].y==array[i+1].y && array[i].x>array[i+1].x){
                                                      temp1=array[i+1].x;
                                                      array[i+1].x=array[i].x;
                                                      array[i].x=temp1;
                                                      }
                          }
    


  • habs nicht getestet aber sieht gut aus


Anmelden zum Antworten