From 7031d2e0ba32e45954244bba177c8b88cb1ba2f8 Mon Sep 17 00:00:00 2001 From: michaelhans <michaelhans777@gmail.com> Date: Thu, 4 Mar 2021 18:41:03 +0700 Subject: [PATCH] Added Quick Sort Algorithm --- src/Array_Generator.c | 41 ++++++++++++++++++++++++ src/QuickSort.c | 73 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 src/Array_Generator.c create mode 100644 src/QuickSort.c diff --git a/src/Array_Generator.c b/src/Array_Generator.c new file mode 100644 index 0000000..74f804e --- /dev/null +++ b/src/Array_Generator.c @@ -0,0 +1,41 @@ +#define INFTY INT_MAX + +#include <stdio.h> +#include <time.h> +#include <string.h> +#include <stdlib.h> + +int main() +{ + int *T; + int N; + int i, j; + FILE *fptr; + + scanf("%d", &N); + T = malloc(N * sizeof(int *)); + srand(0); + for (i = 0; i < N; i++) + { + int value = (rand() % (N)) + 1; + T[i] = value; + } + + int randomVal = N; + char strRandomVal[5]; + sprintf(strRandomVal, "%d", randomVal); + char URL[50] = "../test/"; + char filename[20] = "qsort_"; + strcat(filename, strRandomVal); + strcat(URL, filename); + printf("%s\n", URL); + fptr = fopen(URL, "w+"); + fprintf(fptr, "%d\n", N); + for (i = 0; i < N; i++) + { + fprintf(fptr, "%d ", T[i]); + } + fclose(fptr); + printf("Success generating array!\n"); + return 0; +} \ No newline at end of file diff --git a/src/QuickSort.c b/src/QuickSort.c new file mode 100644 index 0000000..0074171 --- /dev/null +++ b/src/QuickSort.c @@ -0,0 +1,73 @@ +#include <stdio.h> + +// Menuliskan array ke layar +void PrintArray(int T[], int a, int b) +{ + for (int i = a; i <= b - 1; i++) + { + printf("%d ", T[i - 1]); + } + printf("%d\n", T[b - 1]); +} + +// Melakukan partisi sembari menukar value dengan pivot ke-i +void Partisi(int T[], int i, int j, int *k) +{ + int pivot = T[i - 1]; + int p = i; + int q = j; + while (p <= q) + { + while (T[p - 1] < pivot) + { + p++; + } + while (T[q - 1] > pivot) + { + q--; + } + if (p < q) + { + int temp = T[p - 1]; + T[p - 1] = T[q - 1]; + T[q - 1] = temp; + p++; + q--; + } + else if (p == q) + { + p++; + } + } + *k = q; +} + +// Mengurutkan array dengan menggunakan Quick Sort +void QuickSort(int T[], int i, int j) +{ + int k; + if (i < j) + { + Partisi(T, i, j, &k); + // PrintArray(T, i, k); + // PrintArray(T, k + 1, j); + QuickSort(T, i, k); + QuickSort(T, k + 1, j); + } +} + +int main() +{ + int T[5000]; + int N; + scanf("%d", &N); + for (int i = 0; i < N; i++) + { + scanf("%d", &T[i]); + } + + PrintArray(T, 1, N); + QuickSort(T, 1, N); + PrintArray(T, 1, N); + return 0; +} \ No newline at end of file -- GitLab