Lösung Aufgabe 5 (10 Programmierpunkte - Abgabe per email)
#include <stdio.h> #include <stdlib.h> #include <sys/times.h> #define DIM 1000000 main() { struct tms buffer; int feld[DIM]; int feld_kopie[DIM]; int i; for (i=0;i<DIM;i++) { /* if (i%2) feld[i] = feld_kopie[i] = rand(); else */ feld[i] = feld_kopie[i] = 7; } times(&buffer); printf("Zeit vor dem Sortieren: %d\n",buffer.tms_utime); my_qsort_000000(feld, DIM ); times(&buffer); printf("Zeit vor dem UNIX Sortieren: %d\n",buffer.tms_utime); my_qsort_000000(feld_kopie, DIM ); times(&buffer); printf("Zeit nach dem UNIX Sortieren: %d\n",buffer.tms_utime); if (memcmp(feld,feld_kopie, DIM * sizeof(int) ) != 0) printf("Wir haben Probleme\n"); } my_comp(int *a, int *b) { return *a - *b; } /* my_qsort_000000(int *feld, int feld_laenge) { qsort(feld,feld_laenge, sizeof(int), my_comp); } */ my_qsort_000000(int *feld, int feld_laenge) { qs(feld,0,feld_laenge-1); } qs(int a[],int l,int r) { int i,j,h,v; if (r>l) { i = l; j = r; v=a[l]; do { do { i++; } while ((i<=r) && (a[i]<v)); do { j--; } while ((j>=l) && (a[j]>v)); if (j<i) break; h = a[i];a[i]=a[j];a[j]=h; } while (1); h = a[l];a[l]=a[j];a[j]=h; qs(a,l,j-1); qs(a,i,r); } }