[C] Quicksort mit Int funktioniert nicht bei großen Zahlen

12/07/2013 16:20 Belur#1
Hey,

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]={{1564}, {2123}, {374}, {4297}, {5846}};
int daten[]={54612374297846};

void qs(int *datenint linksint rechts) {
  
int i,j;
  
char x,y;

  
i=linksj=rechts;
  
daten[(links+rechts)/2]; // mittleres Element

  
do {
    while (
daten[i]<&& i<rechtsi++; // such Element für "große Klasse"
    
while (x<daten[j] && j>linksj--;     // such Element für "kleine Klasse"

    
if (i<=j) {                                     // vertausche Elemente
      
daten[i];
      
daten[i] = daten[j];
      
daten[j] = y;
      
i++; j--;
    }
  } while (
i<=j);

  if (
links<jqs(datenlinks,j);                   // Aufruf für "kleine Klasse"
  
if (i<rechtsqs(datenirechts);          // 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(daten0zaehler-1);
}



int main(int argcchar **argv) {
    
int i;




      
// Sortieren dar Daten
      
quick_sort(daten);


      for(
i=0i<5i++){
      
printf("%d\t"daten[i]);

      }
      return 
0;


Hoffe mir kann da vllt jmd helfen.

Grüße
12/07/2013 16:57 Tasiro#2
Quote:
Originally Posted by Belur View Post
PHP Code:
  char x,y
Da.
12/07/2013 17:01 Belur#3
Zu blöd -.-

Hätte ich selbst sehen können.

Danke:)
12/07/2013 17:16 MrSm!th#4
#closed