MergeSort

#1
C:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "introprog_input_merge_sort.h"

void merge(int* array, int first, int middle, int last)
{
  int *Elements = (int*) malloc((last - first + 1)*(sizeof(int)));
  int k = first;
  int m = middle + 1;
  int i = 0;
 
  while(k <= middle && m <=last) {
    if(array[k] <= array[m]) {
      Elements[i] = array[k];
      k = k + 1;
    }
    else {
      Elements[i] = array[m];
      m = m + 1;
    }
    i = i + 1;
  }
 
  while(k <= middle) {
    Elements[i] = array[k];
    k = k + 1;
    i = i + 1;
  }

  while(m <= last) {
    Elements[i] = array[m];
    m = m + 1;
    i = i + 1;
  }
  int j = 1;

  while(j < i) {
    array[first + j - 1] = Elements[j];
    j = j + 1;
  }
 
}

void merge_sort(int* array, int first, int last)
{
  if(first < last) {
    int q = (first + last)/2;
    merge_sort(array,first,q);
    merge_sort(array,q+1, last);
    merge(array, first, q, last);
  }
}

int main (int argc, char *argv[])
{
    if (argc!=3){
        printf ("usage: %s <maximale anzahl>  <dateipfad>\n", argv[0]);
        exit(2);
    }
    
    char *filename = argv[2];
    
    int *array = (int*) malloc(atoi(argv[1])*(sizeof(int)));
    int len = read_array_from_file(array, atoi(argv[1]), filename);

    printf("Eingabe:\n");
    print_array(array, len);

    int last = atoi(argv[1]-1);
    int first = 0;
    merge_sort(array, first, last);

    printf("Sortiert:\n");
    print_array(array, len);

    return 0;
}
Meine Aufgabe ist es ein Array mithilfe MergeSort zu sortieren. Ich habe nun den Code soweit fertig, allerdings wird nichts sortiert, nur der selbe Array wird wieder ausgegeben. Kann mir bitte jemand helfen ? Danke
 
#3
int last = atoi(argv[1]-1);
Schau dir das mal genauer an.
Hab mir die Zeile genauer angeguckt.
Weiß aber nicht warum oder wo der Fehler sein kann. Das Ziel dieser Funktion ist es, das letzte Element des Arrays zu finden, den der Benutzer durch eine Zahl eingibt. Beispiel: Tippt der Benutzer "20" ein werden die ersten 20 Zahlen sortiert, und da bei C der Index bei 0 anfängt muss ich 20-1 nehmen, damit ich mein letztes Element finde.
 

asc

Well-Known Member
c-b Experte
#4
Schau mal genauer wo das -1 steht.
Effektiv ziehst du 1 von einem char* ab und wandelst das dann in ein int um.
 
Oben