ich musste ein bestimmtes Array erzeugen, dieses mit Quicksort sortieren, und dann sortiert ausgeben.
Wir hatten einen vorgebenen Quicksort für Chars. Den sollten wir nur eben für int anpassen.
Habe also die paar "char" durch "int" ersetzt.
Habe mir dann erst ein Testarray erstellt mit kleinen Zahlen:
Bsp:
int daten[]={5,4,3,2,1};
Ausgabe:
1 2 3 4 5
Dafür klappt das ganze auch gut. Die zahlen werden sortiert ausgegeben.
Sobald ich aber größere Zahlen nehme, werden die Zahlen erstmal nicht mehr richtig sortiert, und es kommen auf einmal vollig fremde Zahlen in die Ausgabe.
Bsp:
int daten[]={546, 123, 74, 297, 846};
Ausgabe:
74 34 123 41 846
Wie man sieht, sind die Zahlen weder sortiert, noch ist die "34" und die "41" zB Element des Arrays gewesen.
Dieser Fehler tritt bei Zahlen ab 128 auf. Obwohl man in einem normalem Int ja eig. Zahlen bis 65.535 speichern sollen könnte.
Weiß echt nicht, was das Problem ist.
Code sieht so aus:
PHP Code:
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define yl 2
#define xl 5
int zahlen[xl][yl]={{1, 564}, {2, 123}, {3, 74}, {4, 297}, {5, 846}};
int daten[]={546, 123, 74, 297, 846};
void qs(int *daten, int links, int rechts) {
int i,j;
char x,y;
i=links; j=rechts;
x = daten[(links+rechts)/2]; // mittleres Element
do {
while (daten[i]<x && i<rechts) i++; // such Element für "große Klasse"
while (x<daten[j] && j>links) j--; // such Element für "kleine Klasse"
if (i<=j) { // vertausche Elemente
y = daten[i];
daten[i] = daten[j];
daten[j] = y;
i++; j--;
}
} while (i<=j);
if (links<j) qs(daten, links,j); // Aufruf für "kleine Klasse"
if (i<rechts) qs(daten, i, rechts); // Aufruf für "große Klasse"
}
/**
* Diese Funktion bereitet den Aufruf der Rekursiven "qs"
* Funktion vor.
*
* Der Parameter "daten" enthält die Daten, die sortiert
* werden sollen.
*/
void quick_sort(int *daten) { // Quicksort vorbereiten
int zaehler;
zaehler = 5;
qs(daten, 0, zaehler-1);
}
int main(int argc, char **argv) {
int i;
// Sortieren dar Daten
quick_sort(daten);
for(i=0; i<5; i++){
printf("%d\t", daten[i]);
}
return 0;
}
Grüße