Problem beim Quicksort-Algorithmus in C
Verfasst: Mi Dez 09, 2020 1:50 pm
Hallo Leute,
ich habe die Aufgabe bekommen ein zweidimensionales int Array, das zufällig mit rand() gefüllt wird, mit dem Quicksort-Verfahren zu sortieren.
Wie viele Zahlen mit rand() erstellt werden soll durch die Konstante X_SIZE bestimmt werden können.
Ein kleines Bsp. wie die Ausgabe des Arrays vor und nach dem Sortieren aussehen soll, findet ihr im Anhang.
Grundsätzlich funktioniert mein Programm. Allerdings ergibt sich ein merkwürdiges Problem.
Wenn X_SIZE auf 10 gesetzt wird passt alles...aber sobald ich X_SIZE größer oder kleiner 10 setze sortiert Quicksort falsch.
Hat jemand eine Idee woran das liegen könnte? Google spuckt nichts aus und ich bin mit meinem (recht spärlichen) Latein am Ende
LG Kai
Hier der Code:
Main:
Quicksort:
Ausgabe des Arrays (print_array):
Includes & defines:
ich habe die Aufgabe bekommen ein zweidimensionales int Array, das zufällig mit rand() gefüllt wird, mit dem Quicksort-Verfahren zu sortieren.
Wie viele Zahlen mit rand() erstellt werden soll durch die Konstante X_SIZE bestimmt werden können.
Ein kleines Bsp. wie die Ausgabe des Arrays vor und nach dem Sortieren aussehen soll, findet ihr im Anhang.
Grundsätzlich funktioniert mein Programm. Allerdings ergibt sich ein merkwürdiges Problem.
Wenn X_SIZE auf 10 gesetzt wird passt alles...aber sobald ich X_SIZE größer oder kleiner 10 setze sortiert Quicksort falsch.
Hat jemand eine Idee woran das liegen könnte? Google spuckt nichts aus und ich bin mit meinem (recht spärlichen) Latein am Ende

LG Kai
Hier der Code:
Main:
Code: Alles auswählen
#include "print_array.h"
#include "quicksort.h"
int main() {
int puffer[X_SIZE][DIMENSIONS];
int k = 1;
for (int i = 0; i < X_SIZE; i++) {
puffer[i][0] = k;
puffer[i][1] = rand();
k++;
}
printf("\n");
print_array(puffer);
quicksort(puffer, 0, X_SIZE);
print_array(puffer);
return 0;
}
Code: Alles auswählen
#include "defines_includes.h"
void quicksort(int puffer[][DIMENSIONS], int start, int end){
int i, j, x, y, z;
i = start;
j = end-1;
x = puffer[(start+end)/2][1];
do {
while (puffer[i][1] < x && i < end)i++;
while (x < puffer[j][1] && j > start)j--;
if (i <= j) {
y = puffer[i][1];
z = puffer[i][0];
puffer[i][1] = puffer[j][1];
puffer[i][0] = puffer[j][0];
puffer[j][1] = y;
puffer[j][0] = z;
i++;
j--;
}
}while(i<=j);
if(start<j) quicksort(puffer, start, j);
if(i<end) quicksort(puffer, i, end);
}
Ausgabe des Arrays (print_array):
Code: Alles auswählen
#include "defines_includes.h"
void print_array(int puffer[][DIMENSIONS]){
printf("Index\tZufallszahl\n");
for (int m = 0; m < X_SIZE; m++) {
for (int n = 0; n < DIMENSIONS; n++) {
printf("%d\t\t", puffer[m][n]);
}
printf("\n");
}
printf("\n");
}
Code: Alles auswählen
#include <stdlib.h>
#include <stdio.h>
#define DIMENSIONS 2
#define X_SIZE 10