myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   aufgabe in c -> rekursiver selectionsort (https://mygully.com/showthread.php?t=2180350)

panade 10.12.10 10:44

aufgabe in c -> rekursiver selectionsort
 
vorab mein code ist totaler gedanken mist... aber da ich 2 stunden brainfuck betrieben habe würde ich gern wissen wo der fehler ist.

aufgabe war selection sort rein rekursiv lösen.

Code:

#include


int mini(int *feld, int size){
    int min;

    min=feld[size];

    size=size-1;
    if(size==0){
        return min;
    }
    if(min>feld[size]){
        min=feld[size];
    }
    return mini(feld, size-1);
}

void feldaus(int *feld, int size){
    int i=0;
    for(i;i<7;i++){
        printf("%d. Zahl: %d \n", i, feld[i]);
    }
}

void tausch(int *feld, int i, int j){
    int temp;
    temp=feld[i];
    feld[i]=feld[j];
    feld[j]=temp;
}

int such(int *feld, int size,int min){
    if(feld[size]==min){
        printf("stelle des minimums: %d\n", size);
        return size;
    }
    such(feld, size-1, min);
}

int sort(int *feld,int size){
    int min;
    int s;
    if(size==7){
        size--;
    }
    if(size==0){
        return 0;
    }
    min=mini(feld, size);
    s=such(feld, size, min);
    tausch(feld, s, size);
    sort(feld, size-1);
}



int main(int argc, char* arghv[])
{
    int i=0;
    int size=6;
    int min;
    int s;
    int feld[7];
    for(i;i<7; i++){
        printf("%d. Zahl eingeben: ", i);
        scanf("%d", &feld[i]);
    }
   
    sort(feld, size);
   
    feldaus(feld, size);
   
    return 0;
}

es gibt funktionen
sort-> sortieren
such-> suchen
mini -> minimum im feld finden
tausch -> tausch in dreiecksform

plan war: suche im feld das minimum setze es an das ende vom feld und wiederhole für den felddurchlauf -1 feldstelle

rekkursiv bedeutet in dem zusammenhang weitestgehend es ohne for schleifen und nur durch sich selbst aufrufende funktionen zu realisieren.

witzigster part: sort ruft funktion mini auf mini liefert das minimum sort ruft such auf um die stelle an der das minimum stand zurück zu geben <<<< war das einfachste was mir auf die schnelle einfiel da ich keine lust hatte die minimum suche doppelt rekkursiv zu machen.

wmosebach 11.12.10 01:36

Ich geb mal nen Tip ab, vll findest du damit deinen Fehler selber ;)

Mitm Schreibtischtest findest du folgendes heraus, wenn du dir die Funktionsaufrufe aufschreibst:
([] steht dabei für das array, - für jede aufrufstufe)

sort([], 6)
-mini([], 6) feld[6]>feld[5]
--mini([], 4) feld[4]>feld[3]
---mini([], 2) feld[2]>feld[1]
----mini([], 0) feld[0]>feld[-1] -->error
//-----mini([], -2) ...

der rest müsste funktionieren..., aber erstmal durchtesten und notfalls nochmal bescheid geben

viel erfolg


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.