From cdec985db1eceeb708def5ce8166e4170d1639a3 Mon Sep 17 00:00:00 2001 From: kde0820 Date: Sat, 2 Dec 2017 09:33:23 +0900 Subject: [PATCH] C quicksort (#44) * Add C example for recursion * Add loop_sum in c * Add recursive_sum in c * Add quicksort in c --- 04_quicksort/c/01_loop_sum.c | 16 +++++++++++++ 04_quicksort/c/02_recursive_sum.c | 14 +++++++++++ 04_quicksort/c/05_quicksort.c | 40 +++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 04_quicksort/c/01_loop_sum.c create mode 100644 04_quicksort/c/02_recursive_sum.c create mode 100644 04_quicksort/c/05_quicksort.c diff --git a/04_quicksort/c/01_loop_sum.c b/04_quicksort/c/01_loop_sum.c new file mode 100644 index 0000000..81763ee --- /dev/null +++ b/04_quicksort/c/01_loop_sum.c @@ -0,0 +1,16 @@ +#include + +int sum(int *arr, int size) { + int total = 0; + for (int i = 0; i < size; i++) { + total += arr[i]; + } + return total; +} + +int main(void) { + int arr[4] = { 1,2,3,4 }; + printf("%d", sum(arr, 4)); + + return 0; +} \ No newline at end of file diff --git a/04_quicksort/c/02_recursive_sum.c b/04_quicksort/c/02_recursive_sum.c new file mode 100644 index 0000000..28aa8bf --- /dev/null +++ b/04_quicksort/c/02_recursive_sum.c @@ -0,0 +1,14 @@ +#include + +int sum(int *arr, int index, int size) { + if (index == size) + return 0; + return arr[index] + sum(arr, index + 1, 4); +} + +int main(void) { + int arr[4] = { 1,2,3,4 }; + printf("%d", sum(arr, 0, 4)); + + return 0; +} \ No newline at end of file diff --git a/04_quicksort/c/05_quicksort.c b/04_quicksort/c/05_quicksort.c new file mode 100644 index 0000000..b9b5d7c --- /dev/null +++ b/04_quicksort/c/05_quicksort.c @@ -0,0 +1,40 @@ +#include + +// Quick Sort +void quick_sort(int *array, int start, int end) { + if (start < end) { + int q = partition(array, start, end); + quick_sort(array, start, q - 1); + quick_sort(array, q + 1, end); + } +} +// Partition by pivot +int partition(int *array, int start, int end) { + int pivot = array[end]; + int i = start - 1; + int temp = 0; + for (int j = start; j < end; j++) { + if (array[j] <= pivot) { + i++; + temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + } + temp = array[i + 1]; + array[i + 1] = array[end]; + array[end] = temp; + + return i + 1; +} + +int main(void) { + int arr[4] = {10, 5, 2, 3}; + quick_sort(arr, 0, 3); + // Print result + for (int i = 0; i < 4; i++) { + printf("%d ", arr[i]); + } + + return 0; +} \ No newline at end of file