qsort array funktioniert nicht

Gast #5780745
Ich benötige den kleinsten Wert im Array und möchte ein Array sortieren, 
aber es funktioniert mit qsort irgendwie nicht so wie ich möchte:

c]


uint8_t calculateIndex()
{
  uint8_t array_[3];

  array_[0] = getNumberOfArrayElements(result1);
  array_[1] = getNumberOfArrayElements(result2);
  array_[2] = getNumberOfArrayElements(result3);


  int8_t size = sizeof(array_) / sizeof(array_[0]);
        qsort((void*)array_, size, sizeof(array_[0]), comparator);

  return array_[0];
}


[/c]
#5780757
Walter T. schrieb:
> Das ist die "naive" Implementierung einer
> for-Schleife schneller.

Alle Elemente durchzugehen und immer das kleinste zu speichern ist sogar 
die nachweislich schnellste überhaupt mögliche Möglichkeit. Die untere 
Schranke für die Ermittlung des Minimalwert bei einer zufälligen Folge 
von Zahlen muss ja O(n) sein.

Darum ist quicksort mit O(n*log(n)) im Mittel und sogar O(n²) im worst 
case in jedem Fall langsamer.

Schneller kann nur noch werden falls die Folge nicht zufällig ist, 
sondern gewisse Muster aufweist.
Gast #5782296
Cyblord -. schrieb:
> Walter T. schrieb:
>> Das ist die "naive" Implementierung einer
>> for-Schleife schneller.
>
> Alle Elemente durchzugehen und immer das kleinste zu speichern ist sogar
> die nachweislich schnellste überhaupt mögliche Möglichkeit. Die untere
> Schranke für die Ermittlung des Minimalwert bei einer zufälligen Folge
> von Zahlen muss ja O(n) sein.
>
> Darum ist quicksort mit O(n*log(n)) im Mittel und sogar O(n²) im worst
> case in jedem Fall langsamer.
>
> Schneller kann nur noch werden falls die Folge nicht zufällig ist,
> sondern gewisse Muster aufweist.

Die Idee ist mir direkt nach der Fragestellung auch eingefallen. Ich 
habe es dann mit der For-Schleife gemacht.

Jedoch konnte ich nicht sofort antworten, da es nicht angemeldeten Usern 
leider nicht erlaubt ist direkt nach Eröffnen eines Threads 2 Antworten 
innert einer Stunde zu verfassen.

Den Fehler von mir habe ich bezüglich qsort auch gefunden. Es hat nicht 
funktioniert, da ich den Prototypen vergessen habe zu definieren. Das 
hätte mir aber der Compiler doch mit einer Warnung herausgeben müssen 
oder etwa nicht?
Persönliche Seite #5782315
hans schrieb:
> Das hätte mir aber der Compiler doch mit einer Warnung herausgeben
> müssen oder etwa nicht?

Da Du Deinen Quelltext nicht gezeigt hast, sondern nur ein 
Fragmentschnipselchen, lässt sich die Frage nicht wirklich beantworten.

Wenn Du eine Funktion verwendest, ohne daß an der Stelle der Verwendung 
die Funktion selbst oder ein Prototyp bekannt ist, gibt ein 
funktionierender Compiler eine entsprechende Warnung aus, das ist 
richtig. Man kann natürlich Warnungen auch abschalten, dann sieht man 
sie nicht.
Beitrag #5782570 wurde von einem Moderator gelöscht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.