Lösung Aufgabe 1 (5 Programmierpunkte - Abgabe per email)
#include <stdlib.h>
int feld[] = {3,4,6,3,8,9,3,4,6,8};
int feld2[] = {3,4,6,3,8,9,3,4,6,8};
main()
{
int i;
my_sort_system(feld2, sizeof(feld2)/sizeof(int) );
for (i=0; i<sizeof(feld2)/sizeof(int); i++)
printf("%d ",feld2[i]);
printf("\n");
my_sort_000000(feld, sizeof(feld)/sizeof(int) );
for (i=0; i<sizeof(feld)/sizeof(int); i++)
printf("%d ",feld[i]);
printf("\n");
}
my_comp(const void *a, const void *b)
/* rückgabe 0 bei gleichheit
<0 wenn a kleiner b
>0 sonst */
{
return *(int *)a - *(int *)b;
}
my_sort_system(int *feld, int feld_laenge)
{
qsort(feld,feld_laenge, sizeof(int), my_comp);
}
my_sort_000000(int *feld, int feld_laenge)
{
int i,j,temp;
for (i=0;i<feld_laenge;i++)
for (j=i+1;j<feld_laenge;j++)
if (feld[i] > feld[j]) // tauschen
{ temp=feld[i];feld[i]= feld[j];feld[j]=temp;}
}
Lösung Aufgabe 2 (5 Programmierpunkte - Abgabe per email)
#include <stdlib.h>
#define nicht_da -1
//int feld[] = {2,5,6,7,9,11,14,29};
int feld[] = {2,5};
main()
{
int ergebnis, suchwert;
scanf("%d",&suchwert);
ergebnis = my_bsearch_system(feld, sizeof(feld)/sizeof(int) , suchwert);
if (ergebnis == nicht_da)
printf("nicht gefunden \n");
else
printf("%d gefunden \n",ergebnis);
ergebnis = my_bsearch_000000(feld, sizeof(feld)/sizeof(int) , suchwert);
if (ergebnis == nicht_da)
printf("nicht gefunden \n");
else
printf("%d gefunden \n",ergebnis);
}
my_bsearch_000000(int *feld, int size, int suchwert)
{
if (size == 0)
return nicht_da;
if(feld[size/2] == suchwert)
return feld[size/2];
else if (feld[size/2] < suchwert)
return my_bsearch_000000( &feld[size/2 +1], size - size/2 -1, suchwert);
else
return my_bsearch_000000( feld, size/2, suchwert);
}
int my_comp(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
my_bsearch_system(int *feld, int size, int suchwert)
{
int *ergebnis;
ergebnis = bsearch(&suchwert,feld,size, sizeof(int), my_comp);
if (ergebnis == NULL)
return -1;
else
return *ergebnis;
}