From 1f351ded8e42cff9a7549c3100bb47d822e416f8 Mon Sep 17 00:00:00 2001 From: joachimschmidt557 Date: Thu, 2 May 2019 16:01:35 +0200 Subject: [PATCH] Add selection sort --- gnome-sort.c | 8 ++++---- selection-sort.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 selection-sort.c diff --git a/gnome-sort.c b/gnome-sort.c index e045810..18bf87a 100644 --- a/gnome-sort.c +++ b/gnome-sort.c @@ -2,9 +2,9 @@ #define SWAP(x, y, T) do { T SWAP = x; x = y; y = SWAP; } while (0) -void gnome_sort(int array[], int n) { +void gnome_sort(int array[], int high) { int i = 0; - while (i < n) { + while (i < high) { if (array[i] > array[i+1]) { SWAP(array[i], array[i+1], int); if (i > 0) i--; @@ -13,8 +13,8 @@ void gnome_sort(int array[], int n) { } } -void print_array(int array[], int n) { - for (int i = 0; i < n; i++) +void print_array(int array[], int high) { + for (int i = 0; i <= high; i++) printf("%d ", array[i]); } diff --git a/selection-sort.c b/selection-sort.c new file mode 100644 index 0000000..25d8311 --- /dev/null +++ b/selection-sort.c @@ -0,0 +1,31 @@ +#include + +#define SWAP(x, y, T) do { T SWAP = x; x = y; y = SWAP; } while (0) + +int index_of_min(int array[], int low, int high) { + int result = low; + for (int i = low; i <= high; i++) { + if (array[i] < array[result]) + result = i; + } + return result; +} + +void selection_sort(int array[], int high) { + for (int i = 0; i <= high; i++) { + int min = index_of_min(array, i, high); + SWAP(array[i], array[min], int); + } +} + +void print_array(int array[], int high) { + for (int i = 0; i <= high; i++) + printf("%d ", array[i]); + printf("\n"); +} + +void main() { + int array[] = {1, 3, 6, 2, 4, 73, 23, 61, 32, 64, 11, 32, 3, 2}; + selection_sort(array, 13); + print_array(array, 13); +}