From 570f8a59bdcc05337bb0dce336ebf0810a2313fe Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Sat, 20 Nov 2010 15:21:31 +0100 Subject: [PATCH] finished selection sort and binary search (non-recursive) --- bin/5_n_c_bsearch | Bin 0 -> 11209 bytes src/5_n_c_bsearch.c | 93 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100755 bin/5_n_c_bsearch create mode 100644 src/5_n_c_bsearch.c diff --git a/bin/5_n_c_bsearch b/bin/5_n_c_bsearch new file mode 100755 index 0000000000000000000000000000000000000000..859efcd0754e2d6d71191c5b1dcb4bf95af358b5 GIT binary patch literal 11209 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 O-Du0rGWmkcwfiq}9$aMr literal 0 HcmV?d00001 diff --git a/src/5_n_c_bsearch.c b/src/5_n_c_bsearch.c new file mode 100644 index 0000000..ce268c6 --- /dev/null +++ b/src/5_n_c_bsearch.c @@ -0,0 +1,93 @@ +#include + +#define NOT_FOUND -1 + +void swap(int * a, int * b); +void print_array(int array[], size_t start, size_t end); +void selection_sort(int array[], size_t start, size_t end); +int binary_search(int array[], int needle, size_t start, size_t end); + + +int main() { + /* int data[] = {2, 5, 9, 18, 23, 34, 36, 99}; */ + int data[] = {243, 12, 12, 74, 346, 32, 93, 1, 0, 26, 236, 2, 12323}; + int needle, found = NOT_FOUND; + size_t size = sizeof(data) / sizeof(int); + + printf("What are your looking for?: "); + scanf("%d", &needle); + + printf("Data before sorting: "); + print_array(data, 0, size); + + selection_sort(data, 0, size); + + printf("Data after sorting: "); + print_array(data, 0, size); + + found = binary_search(data, needle, 0, size); + + if (found != NOT_FOUND) { + printf("%d is at the %dth position\n", needle, found); + return 0; + } + else { + printf("%d was not found!\n", needle); + return -1; + } +} + +void print_array(int array[], size_t start, size_t end) { + int index; + for (index = start; index < end; index++) { + printf("%d,", array[index]); + } + printf("\n"); +} + + +/* simple selection sort algorithm for an int array */ +void selection_sort(int array[], size_t start, size_t end) { + int min_index, progress, index; + + for (progress = start; progress < end; progress++) { + min_index = progress; + for (index = progress; index < end; index++) { + if (array[index] < array[min_index]) { + min_index = index; + } + } + swap(&array[progress], &array[min_index]); + } +} + +/* do a binary search on a previously sorted array */ +int binary_search(int array[], int needle, size_t start, size_t end) { + size_t middle; + + while (end >= start) { + middle = (end + start) / 2; + + if (array[middle] == needle) { + return middle; + } + + if (needle < array[middle]) { + end = middle - 1; + } + else { + start = middle + 1; + } + } + + return NOT_FOUND; +} + +/* swap two int values referenced by pointers */ +void swap(int * a, int * b) { + int temp = *a; + + *a = *b; + *b = temp; +} +