diff --git a/07/selectionsort.c b/07/selectionsort.c index f637dfc..2d921d6 100644 --- a/07/selectionsort.c +++ b/07/selectionsort.c @@ -34,9 +34,71 @@ #define MAX_ZAHLEN 100 +void selectionsort(int array[], unsigned int len); +unsigned int findeMaxIdx(int array[], unsigned int len); +void tausche(int *elem1, int *elem2); +void zeigeArray(int array[], unsigned int len); + int main() { + int zahlen[MAX_ZAHLEN] = {10, 5, 3, -1, 0, 2}; + unsigned int len = sizeof(zahlen) / sizeof(zahlen[0]); + unsigned int benutzteLaenge = 6; + + zeigeArray(zahlen, benutzteLaenge); + + selectionsort(zahlen, benutzteLaenge); + + zeigeArray(zahlen, benutzteLaenge); return 0; +} + +void zeigeArray(int array[], unsigned int len) +{ + for(int i = 0; i < len; i++) + { + printf("%3d ", array[i]); + } + printf("\n"); +} + +unsigned int findeMaxIdx(int array[], unsigned int len) +{ + unsigned int maxIdx = 0; + + for(int i = 1; i < len; i++) + { + if(array[i] > array[maxIdx]) + { + maxIdx = i; + } + } + + return maxIdx; +} + +void selectionsort(int array[], unsigned int len) +{ + for(int unsortierteLaenge = len; unsortierteLaenge >= 2; unsortierteLaenge--) + { + unsigned int maxIdx = findeMaxIdx(array, unsortierteLaenge); + + tausche(&array[maxIdx], &array[unsortierteLaenge-1]); + } +} + +/*void tausche(int array[], unsigned int idx1, unsigned int idx2) +{ + int tmp = array[idx1]; + array[idx1] = array[idx2]; + array[idx2] = tmp; +}*/ + +void tausche(int *elem1, int *elem2) +{ + int tmp = *elem1; + *elem1 = *elem2; + *elem2 = tmp; } \ No newline at end of file