MergeSort -> merge



  • Hallo, ich habe ein Problem beim der merge-Funktion von merge-sort.
    Aufgabe ist es, die Funktion merge so zu ergänzen, dass am Ende ein Sortiertes Feld da steht.
    Allerdings bekomme ich zwar ein Ergebnis aber leider das falsche.

    Hat jemand Tips für mich?

    Danke.

    #include<stdio.h>
    #include<stdlib.h>
    #define ARRAY_SIZE 8
    
    int main(void){
    
    int i;
    int arr [] = {10, 5, 15, 2, 8, 7, 2, 1};
    
    mergeSort(arr, ARRAY_SIZE);
    
    printf("Ausgabe des sortierten Feldes \n");
    
    for(i = 0; i < ARRAY_SIZE; i++)
        printf("%d ", arr[i]);
        printf("\n");
    
    return 0;
    }
    
    void mSort(int arr [], int mergeArray[], int n) {
        if(n > 1)
        {
            mSort(arr, mergeArray, n/2);
            mSort(arr + n / 2, mergeArray, n-n/2);
            merge(arr, mergeArray, n);
        }
    }
    
    void mergeSort(int arr[], int n) {
    int * mergeArray;
    
    mergeArray = (int *) malloc(n * sizeof(int));
    
    mSort(arr, mergeArray, n);
    
    free(mergeArray);
    }
    
    void merge(int arr[],int mergeArray[],int n)
    {
        int i,j,k;
        i=0;
        j=n/2;
        k=0;
                                    //array sortieren
        while(i<(n/2) && j<n)
        {
            if(arr[i]<arr[j])
            {
                mergeArray[k] = arr[i];
                i++;
                k++;
            }
            else
            {
                mergeArray[i] = arr[j];
                j++;
                k++;
            }
        }
    
        while(i<n/2)              //In erster Hälfte könnten noch Werte sein.
        {
            mergeArray[k]=arr[i];
            i++;
            k++;
        }
                                    //In zweiter Hälfte könnten noch Werte sein.
        while(j<n)
        {
            mergeArray[k]=arr[i];
            k++;
            j++;
        }
    
        for(k=0; k<n; k++)
        {
            arr[k]=mergeArray[k];
        }
    
    }
    


  • k ist doch Dein Index in mergeArray , oder? Ausser in Zeile 58?!

    Ist es richtig in Z. 73 arr[i] zu kopieren?



  • Oh, da ist mir wohl ein Schreibfehler unterlaufen... :p
    Danke!

    Den hatte ich glatt übersehen, jetzt läuft es auch!!! 🙂


Anmelden zum Antworten